如何测试循环引用的变量?
我正在使用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);
答案 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;
}