PHP-引用(&)关联数组的未实例化元素时,未引发“未定义索引”通知

时间:2018-06-29 09:30:29

标签: php arrays indexing reference undefined

我正在从以下answer看这段代码:

int * int -> int
int * long int -> long int

仅{strong>感谢感谢$string = 'item1:item2:itemx'; $res = array(); $temp = &$nested_array; foreach(explode(':', $string) as $key) { $temp = &$temp[$key]; } ,结果为:

$temp = &$temp[$key]

我不明白为什么$res = [ "item1" => [ "item2" => [ "itemx" => & null ]]] 实例化关联&temp[$key][$key => null]却没有实例化。

我做了一些调试,对于第一个$temp[$key] item1 ):

  1. $ a = $ temp [$ key]:
    • 发出“未定义索引”通知
    • 转储$key返回null。
    • 转储$a返回null。
  2. $ a =&$ temp [$ key]:
    • 不发出“未定义索引”通知
    • 转储$temp返回null。
    • 转储$a返回null。
    • 转储$temp[$key]返回:   $temp

这意味着["item1" => & null]还要实例化$ temp [$ key]或等效地在其前面加上:

$temp = & $temp[$key]

我想了解一下,这是否在php文档中的某个地方得到了解释(我进行了搜索,但没有找到任何东西),或者是否缺少一些讨厌的东西。

谢谢

1 个答案:

答案 0 :(得分:1)

这在文档中进行了解释。创建引用时会创建未定义的变量:

  

注意
  如果您通过引用分配,传递或返回未定义的变量,则会创建该变量。

     

示例#1使用带有未定义变量的引用

<?php
function foo(&$var) { }

foo($a); // $a is "created" and assigned to null

$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)

$c = new StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')); // bool(true)
?>

https://secure.php.net/manual/en/language.references.whatdo.php