【问题标题】:shouldn't PHP array recursion throw an error?PHP数组递归不应该抛出错误吗?
【发布时间】:2011-01-05 03:04:23
【问题描述】:

这是我得到的测试和响应。我认为这可能有问题,应该抛出错误或通知,但我不明白为什么可以容忍。

<?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* } } }
?>

【问题讨论】:

  • 我很惊讶您可以在定义 $test 的同一表达式中引用 $test$test = array('test'); $test[]=&amp;$test; 很清楚。但是你的……
  • 这不是一个真正的问题,我也很惊讶。我只是在玩数组并遇到了个人困境。
  • @Gumbo PHP 很奇怪。您可以在值存在之前分配引用:例如 $x =&amp; $y; $y = 5; 是有效的,$y 之前从未定义过。

标签: php arrays recursion pass-by-reference


【解决方案1】:

这是真正的递归,*RECURSION* 不是真正的错误信息。 这没有问题,因为$test 没有主动重复,在这种情况下var_dump 足够聪明,可以在耗尽内存之前停止。

【讨论】:

    【解决方案2】:

    实际上*RECURSION* 消息是一个错误消息,它结束了脚本的执行。 否则它将执行它,直到达到内存限制。

    【讨论】:

      【解决方案3】:

      您正在设置一个引用,即一个指针,因此没有真正的递归,没有循环。所以不,它不应该抛出错误。

      【讨论】:

        【解决方案4】:

        为什么会有问题? PHP 足够聪明,可以识别出正在递归调用的数组。

        如果你print_r($GLOBALS) 也会发生同样的情况,我认为这没有什么坏处。

        【讨论】:

          【解决方案5】:

          我猜想检测这样的循环并非易事,如果行为不正确,在运行时会立即显现出来。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-02
            • 2015-12-06
            • 1970-01-01
            • 2021-05-10
            相关资源
            最近更新 更多