2010-01-14 64 views
7

这是测试和我得到的回应。我认为这可能有问题,应该抛出一个错误或通知,但我不明白为什么容忍。不应该PHP数组递归抛出一个错误?

<?php 
    $test = array(0 => 'test', 1=> &$test); 
    var_dump($test); 

    // array(2) { [0]=> string(4) "test" [1]=> &array(2) { [0]=> string(4) "test" [1]=> &array(2) { [0]=> string(4) "test" [1]=> *RECURSION* } } } 
?> 
+0

我很惊讶你可以在定义'$ test'的相同表达式中引用'$ test'。 '$ test = array('test'); $ test [] = &$test;'很清楚。但你的... – Gumbo 2010-01-14 15:45:47

+0

这不是一个真正的问题,我也很惊讶。我只是在玩阵列,打个人困境。 – 2010-01-14 15:53:10

+0

@Gumbo PHP很奇怪。您可以在值存在之前分配引用:'$ x = & $y; $ y = 5;'例如是有效的,'$ y'从未定义过。 – Paulpro 2013-07-23 23:39:04

回答

5

这是真正的递归,并且*RECURSION*不是一个真正的错误消息。 这没有问题,因为$test不是主动循环,在这种情况下,var_dump足够聪明,可以在耗尽内存之前停下来。

1

我猜测检测这样的循环是非平凡的,并且如果行为不正确,它将在运行时立即显现。

1

为什么它有问题? PHP非常聪明,可以识别数组正在被递归调用。

同样的情况发生如果你print_r($GLOBALS),我在这看到没有伤害。

1

你正在设置一个引用,也就是一个指针,所以没有真正的递归,没有循环。所以不,它不应该抛出一个错误。

0

实际上,*RECURSION*消息是一条错误消息,它会结束脚本执行。 否则它会执行它,直到内存限制发生变化。