为什么函数中没有识别全局变量

use*_*632 -5 php

为什么打印空行而不是5?

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

$a = 5;
test();
Run Code Online (Sandbox Code Playgroud)

ale*_*lex 6

PHP中的函数不继承全局范围或父范围(除非使用匿名函数use()).

您可以使用该global关键字来访问它们.

function test()
{
 global $a;   
 echo "$a <br/>";   
}
Run Code Online (Sandbox Code Playgroud)

CodePad.


贾里德法里丝还指出,利用全球关联数组$GLOBALS它包含所有的全局变量和,像任何超级全球如$_POST,$_GET等,在范围上随处可见.

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

$a = 5;
test();
Run Code Online (Sandbox Code Playgroud)

CodePad.


你可以使用匿名函数 ......

$a = 5;

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

$test();
Run Code Online (Sandbox Code Playgroud)

CodePad.


作为脚注,尽量不要依赖全局变量.如果你过分依赖它们,它们可能是程序设计不佳的标志.