Лучшее, чем я могу управлять, - это проверка двух переменных, чтобы определить, является ли одна из них ссылкой на другую:
$x = "something";
$y = &$x;
$z = "something else";
function testReference(&$xVal,&$yVal) {
$temp = $xVal;
$xVal = "I am a reference";
if ($yVal == "I am a reference") { echo "is reference<br />"; } else { echo "is not reference<br />"; }
$xVal = $temp;
}
testReference($x,$y);
testReference($y,$x);
testReference($x,$z);
testReference($z,$x);
testReference($y,$z);
testReference($z,$y);
, но я сомневаюсь, что это очень поможет(также не очень хорошо протестирован):
$x = "something";
$y = &$x;
$z = "something else";
function isReference(&$xVal) {
ob_start();
debug_zval_dump(&$xVal);
$dump = ob_get_clean();
preg_match('/refcount\((\d*)\)/',$dump,$matches);
if ($matches[1] > 4) { return true; } else { return false; }
}
var_dump(isReference($x));
var_dump(isReference($y));
var_dump(isReference($z));
Чтобы использовать этот последний метод в своем коде, вам нужно сделать что-то вроде:
foreach($room as $key => $val) {
if(isReference($room[$key])) unset($room[$key]);
}
, потому что $ val никогда не является ссылкойпоскольку это копия исходного элемента массива;и использование & $ val делает его всегда ссылкой