Как устроены переменные

Переменная PHP хранится в контейнере, называемом zval (сокращённо от «Zend value»).

Контейнер zval, помимо типа и значения переменной, также содержит два дополнительных элемента.

  1. is_ref — указывает, является ли переменная частью «набора ссылок» или нет;
  2. refcount — содержит количество имён переменных (символов), которые указывают на данный контейнер zval.

Для вывода информации о переменной используется функция xdebug_debug_zval(), для которой предварительно надо установить Xdebug.

$lang = 'PHP';
xdebug_debug_zval('lang'); // (refcount=1, is_ref=0), string 'PHP' (length=3)

Есть также функция debug_zval_dump(), но её не рекомендуется использовать, т.к. через неё сложно отслеживать значение refcount.

Благодаря свойству «is_ref», PHP знает как отличать обычные переменные от ссылок.