【发布时间】:2016-07-12 22:15:19
【问题描述】:
我遇到了一个包含$a = & $b; 的代码 sn-p,但没有测试 $b 是否真的存在 (if (isset($b)))。我不确定 PHP 是如何处理这个问题的,所以我进行了一个快速的裸测试,现在我更加感兴趣了。
$a = array('a'=>'b', 'x'=>'y');
$b = array();
$b[10] = &$a['a'];
$b[11] = &$a['ppp'];
var_dump($a);
var_dump($b);
echo (isset($a['ppp']) ? "SET" :" NOT SET") . "\n";
echo (isset($b[11]) ? "SET" :" NOT SET") . "\n";
这是裸代码,但输出显示的是:
$b[11] = &$a['ppp']的简单分配就足够了,var_dump($a)报告为有 3 个成员而不是 2 个,即使没有为$a['ppp']分配。$a['ppp']被报告为具有值 (NULL),但也具有isset()=FALSE。-
与此同时,
李>$b[11]显示一个值NULL和isset()=FALSE,即使它的引用对象(显然)确实存在(!)
我很欣赏首先检查可以解决“问题”,但我主要是在寻求更深入的了解。发生了什么事?
【问题讨论】:
-
值为
set,当它是NOT NULL时 -
如果您对这种情况如此感兴趣,为什么不参与讨论?
标签: php reference variable-assignment