Всем доброго времени суток! Как-то так нечаянно получилось, что по цепочке "
Вопросы к собеседованию" (параграф Copy-on-write) ->
статья с более детальным объяснением ->
документация PHP ->
документация расширения hdebug я обнаружил несоответствие теории и практики. Согласно документации, код
$a = "new string";
xdebug_debug_zval('a');
Должен выводить что-то вроде:
a: (refcount=1, is_ref=0)='new string'
Но по факту (на сервере стоит PHP 8.0.6 TS) в консоль выводится
a: (interned, is_ref=0)='new string'
А код
$a = array(1, 2, 3);
$b =& $a;
$c =& $a[2];
xdebug_debug_zval('a');
xdebug_debug_zval("a[2]");
который
по документации должен выдавать
a: (refcount=2, is_ref=1)=array (
0 => (refcount=1, is_ref=0)=1,
1 => (refcount=1, is_ref=0)=2,
2 => (refcount=2, is_ref=1)=3)
a[2]: (refcount=2, is_ref=1)=3
по факту выдаёт
a: (refcount=2, is_ref=1)=array (
0 => (refcount=0, is_ref=0)=1,
1 => (refcount=0, is_ref=0)=2,
2 => (refcount=2, is_ref=1)=3)
a[2]: (refcount=2, is_ref=1)=3
Не то, чтобы меня это очень сильно волновало, но всё таки: в чём может быть причина?