测试变量是否包含循环引用

时间:2013-06-19 01:03:51

标签: php circular-reference

如何测试循环引用的变量?

我正在使用PHP的var_export()函数,并将返回字符串参数设置为true

我发现Warning: var_export does not handle circular references并且想知道是否有人知道测试变量是否包含循环引用的方法,以便我可以在尝试使用var_export之前使用它。

我知道var_export输出可用于重新创建数组的PHP可评估文本,即使我没有使用它,我仍然希望在可用时使用此函数,因为输出格式满足我的需求。 var_dump不是一个选项,因为它不接受返回字符串的参数。我知道我可以缓冲var_dump的输出,它优雅地处理循环引用并将缓冲区内容保存到变量中,但我真的只想知道是否有人知道在变量中测试此类引用的方法。

如果要创建快速循环引用,请执行以下操作:

$r = array();
$r[] = &$r;
var_export($r, true);

2 个答案:

答案 0 :(得分:4)

Hacky但是根据你提供的循环示例返回true:

<?php
// create the circular reference
$r = array();
$r[] = &$r;

function isRecursive($array){
  $dump = print_r($array, true);
  if(strpos($dump, '*RECURSION*') !== false)
      return true;
  else
      return false;
}

echo isRecursive($r); // returns 1

有兴趣了解其他人提出的建议:)

答案 1 :(得分:0)

会这样做吗?

function isRecursive($array) {
    foreach($array as $v) {
        if($v === $array) {
            return true;
        }
    }
    return false;
}