我有这段代码
/// Example 1
$str = "Simple text";
$a = function()
{
global $str;
$str = "edited";
};
$a();
echo $str."\n"; /// edited
/// Example 2
$str = "Simple text";
$a = function()
{
$GLOBALS["str"] = "edited";
};
$a();
echo $str."\n"; /// edited
/// Example 3
$str = "Simple text";
$temp = "";
$a = function()
{
$GLOBALS["temp"] = &$GLOBALS["str"];
};
$a();
echo "[".$str."] [".$temp."]\n"; /// [Simple text] [Simple text]
/// Example 4
$str = "Simple text";
$temp = "";
$a = function()
{
global $str, $temp;
$temp = &$str;
};
$a();
echo "[".$str."] [".$temp."]\n"; /// [Simple text] []
显示第一个示例以及同一事物的第二个示例的值的预期变化......看起来没有区别,请继续!在第三个例子中,我们与超全局数组建立硬链接的函数按预期显示相同的单词,现在看第四个例子,并且...我不是在昏迷中,他链接并只显示变量{ {1}},变量$str
保留为空,为什么?
答案 0 :(得分:2)
在文档中对此进行了详细解释:http://php.net/variables.scope和http://php.net/manual/language.references.spot.php
global $a;
是一个快捷方式:
$a = &$GLOBALS['a'];
所以让我们展开你的最后一个例子:
$a = function()
{
$str = &$GLOBALS['str'];
$temp = &$GLOBALS['temp'];
$temp = &$str; // okay, but $temp is still the local variable
};
我认为一切都按预期工作