2011-10-30 86 views
-5

爲什麼打印的是空行而不是5?爲什麼在函數中不識別全局變量

function test() 
{ 
echo "$a <br/>"; 
} 

$a = 5; 
test(); 
+0

*(相關)* [全球功能](http://stackoverflow.com/questions/5166087/global-in-functions/5166527#5166527) – Gordon

+0

您確定'
'沒有輸出嗎? –

+1

@JaredFarrish:[它應該錯誤](http://codepad.viper-7.com/FZwQbz),也許錯誤報告是關閉的。 – alex

回答

2

你忘了使用global

function test() 
{ 
    global $a; 
    echo "$a <br/>"; 
} 

$a = 5; 
test(); 
+2

...當然你不應該使用這個。 – 2011-10-30 23:23:00

+0

使用參數代替'test($ a)' – samura

+0

當upvoted答案*完全證明了這一點時,說「不要這樣做」有點*豐富*。 –

6

函數在PHP不繼承全局範圍或父範圍(除非使用匿名函數與use())。

您可以使用global關鍵字來訪問它們。

function test() 
{ 
global $a; 
echo "$a <br/>"; 
} 

CodePad


Jared Farish還指出,利用全球關聯數組$GLOBALS它包含所有的全局變量和,像任何超級全球如$_POST$_GET等,在範圍內隨處可見。

function test() 
{ 
echo "$GLOBALS[a] <br/>"; 
} 

$a = 5; 
test(); 

CodePad


你可以使用一個anonymous function ...

$a = 5; 

$test = function() use ($a) { 
    echo $a; 
}; 

$test(); 

CodePad


作爲腳註,try not to rely on global variables。他們可以是一個糟糕的程序設計,如果你過分依賴他們的跡象。

+1

我知道,但我知道,但OP:*請避免不必要的'全局'變量*。 –

+0

另外,'$ GLOBALS ['a'] = 5;'可以和'global $ a;'一起使用。雖然我承認我沒有掌握區別。 –

+0

@JaredFarrish:噢,雖然我從未使用過'$ GLOBALS'。編輯:) – alex

相關問題