Неожиданное наблюдение: var_dump () массива помечает элементы, на которые есть ссылки ... с каких пор?

Я только что провел несколько простых отладочных тестов для массивов и заметил, что когда я выполняю 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) } 

Обратите внимание на символ ∫ рядом с элементом 3, а затем и с элементом 1. Обратите внимание также, что эти записи не показывают тип данных записи.

] После некоторых экспериментов я не вижу этого, если я var_dump скалярного типа, или с объектами или ресурсами. Если массив содержит строковые данные, символом является & (и он по-прежнему показывает тип данных), а также с записями float, boolean и object.

Это работает с PHP 5.2.8

Первый вопрос: когда это произошло такое поведение начинается, или это то, чего я просто не замечал раньше?

Второй вопрос: если такие элементы можно пометить таким образом с помощью var_dump (), есть ли в ядре PHP какая-либо функция, которая позволит мне определить, ссылается ли на элемент массива другая переменная; или это вернет флаг refcount или ref из _zval_struct?

7
задан Mark Baker 16 November 2010 в 12:24
поделиться