Я только что выполнил несколько простых тестов отладки для массивов и заметил, что когда я выполняю var_dump () массива, вывод помечает любой элемент в массиве, на который ссылается другая переменная. В качестве простого эксперимента я запустил следующий код:
$array = range(1,4);
var_dump($array);
echo '<br />';
foreach($array as &$value) {
}
var_dump($array);
echo '<br />';
$value2 = &$array[1];
var_dump($array);
echo '<br />';
, который дает следующий вывод:
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> ∫(4) }
array(4) { [0]=> int(1) [1]=> ∫(2) [2]=> int(3) [3]=> ∫(4) }
Обратите внимание на символ along рядом с элементом 3 и впоследствии с элементом 1. Обратите внимание, что эти записи не показывают тип данных записи.
После некоторых экспериментов, я не вижу этого, если я var_dump скалярного типа, или с объектами или ресурсами. Если массив содержит строковые данные, символом является & (и он все еще показывает тип данных), также с записями типа float, boolean и object.
Это работает с PHP 5.2.8
Первый вопрос: когда это поведение началось, или я просто не замечал этого раньше?
Второй вопрос: если ссылочные элементы могут быть помечены таким образом с помощью var_dump (), есть ли какая-либо функция в ядре PHP, которая позволит мне определить, ссылается ли элемент массива на другую переменную; или это вернет refcount или ref флаг из _zval_struct?