我正在从以下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 ):
$key
返回null。$a
返回null。$temp
返回null。$a
返回null。$temp[$key]
返回:
$temp
这意味着["item1" => & null]
还要实例化$ temp [$ key]或等效地在其前面加上:
$temp = & $temp[$key]
我想了解一下,这是否在php文档中的某个地方得到了解释(我进行了搜索,但没有找到任何东西),或者是否缺少一些讨厌的东西。
谢谢
答案 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