以下是可能泄露PHP错误的代码的简化版本
class AClass
{
public static $prop = "Hi";
}
function assignRef (&$ref)
{
$ref = &AClass::$prop;
echo "inside assignRef: $ref\n";
}
$ref = "Hello";
assignRef($ref);
echo "outside: $ref\n";
打印出来
inside assignRef: Hi
outside: Hello
不应该通过引用$ref
类的$prop
静态变量来分配AClass
并成为"嗨"不只是在assignRef
函数内部而且还在它之外?
答案 0 :(得分:0)
您的示例中的类是无关紧要的简化版本,它产生相同的输出:
function assignRef (&$ref)
{
$prop = 'Hi';
$ref = &$prop;
echo "inside assignRef: $ref\n";
}
$ref = "Hello";
assignRef($ref);
echo "outside: $ref\n";
正在发生的事情是,在函数($ref = &$prop;
)内通过引用进行分配时,您只需更改一个变量所指向的内容,而不是更改它最初指向的值,也不会更改任何其他引用。原始价值。
在此示例中,您实际上有两个名为$ref
的变量 - 一个在函数内部,一个在函数外部。您正在更改函数内部的变量指向的内容,而另一个变量指向原始(未更改)的值。
请考虑以下代码:
$a = 'a';
$b = 'b';
$c = 'c';
$a = &$b;
$b = &$c;
echo "$a / $b / $c";
这导致b / c / c
的输出,而不是您期望的c / c / c
。出现这种情况的原因相同 - 通过引用分配不会影响最初引用的值,也不会更改任何其他引用,这意味着指向原始值的任何其他变量都不会更改。
如果要更改值,而不是创建对其他值的新引用,则必须使用正常分配(=
)。或者,您可以更改所有引用。