PHP變量作用域(花括號、global、閉包)


花括號

很多語言都以花括號作為作用域界限,PHP中只有函數的花括號才構成新的作用域。

<?php
if (True) {
	$a = 'var a';
}

var_dump($a);

for ($i = 0; $i < 1; $i++) {
	$b = 'var b';
	for ($i = 0; $i < 1; $i++) {
		$c = 'var c';
	}
	var_dump($c);
}

var_dump($b);
var_dump($c);
?>

運行結果是:

string(5) "var a" string(5) "var c" string(5) "var b" string(5) "var c"

可見iffor的花括號並無構成新的作用域。

而函數:

<?php
function test() {
	$test = 'var test';
}

test();
var_dump($test);
?>

結果是:

NULL

 

global關鍵字

PHP的執行是以一個.php腳本為單位,在一個.php腳本的執行過程中,可以include和require其他PHP腳本進來執行。

執行的.php腳本與include/require進來的腳本共享一個全局域(global scope)。

global關鍵字無論在哪層,所引用的都是全局域的變量。

<?php
$test = 'global test';
function a() {
	$test = 'test in a()';
	function b() {
		global $test;
		var_dump($test);
	}
	b();
}

a();
?>

執行結果是:

string(11) "global test"

 

閉包

閉包作用域跟函數類似,內層訪問外層變量,外層不能訪問內層變量。

<?php
function a() {
	$test = 'test in a()';
	function b() {
		var_dump($test); // $test不能被訪問
		$varb = 'varb in b()';
	}

	b();
	var_dump($varb); // $varb也不能被訪問
}

a();
?>

執行結果:

NULL NULL

 

 

延伸閱讀:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM