$array = array();
$array[ 'recursive' ] =& $array;
$array[ 'foo' ] = $array;
'foo'
按值分配给$array
,该$array
应复制'foo'
,当时没有$array = array(
'recursive' => &$array,
'foo' => array(
'recursive' => &$array
),
)
键,所以我希望现在情况是这样的:
var_dump( isset( $array[ 'foo' ][ 'foo' ][ 'foo' ] ) );
但如果我现在这样做:
bool(true)
我明白了:
'foo'
我不明白为什么会这样。
如果我为$array = array();
$array[ 'recursive' ] =& $array;
$blah = $array;
$array[ 'foo' ] = $blah;
var_dump( isset( $array[ 'foo' ][ 'foo' ][ 'foo' ] ) );
的分配创建了一个中间变量,如下所示:
bool(false)
我明白了:
'recursive'
我理解为什么'foo'
密钥会无限深,因为它是通过引用分配的,但为什么{{1}}密钥是按值分配的?如何为值处理的事物创建中间变量更改行为?
答案 0 :(得分:0)
因为当你执行$ array [' foo'] = $ array时,解释器会首先添加' foo' $ array数组的索引,然后将新更新的数组放入$ array [' foo']。
当您使用中间$ blah时,您已经存储了来自“foo”之前的$ array的未修改副本。密钥已创建。中间体不会改变行为,它会在创建中间体时保存值的副本,就像它应该的那样。