【发布时间】:2013-07-23 03:15:15
【问题描述】:
$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' 键是按值分配的?为值处理的事物创建中间变量如何改变行为?
【问题讨论】:
-
这可能与此有关:stackoverflow.com/questions/17528280/…,看看你能不能弄清楚。现在对我来说太晚了。 :)
-
根据您链接到的答案,我试图想象代码执行时符号表的外观,但我只达到了我预期的行为,而不是我看到的行为。
标签: php arrays recursion reference