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

时间:2011-10-30 23:19:20

标签: php

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

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

$a = 5;
test();

2 个答案:

答案 0 :(得分: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 :(得分:2)

您忘记使用global

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

$a = 5;
test();