Когда «символ» / «имя переменной» создаются в PHP? - PullRequest
1 голос
/ 23 декабря 2011

Это мои настройки:display_startup_errors = ondisplay_errors = Onerror_reporting = E_ALL |E_STRICT

//code1:
$a = "abcd";
xdebug_debug_zval('a');

Приведенная выше строка кода создаст контейнер zval и свяжет его с символом a '.И даст следующее o / p.

a: (refcount=1, is_ref=0)='abcd' 

рассмотрим следующий код:

//code2:
$a;
echo":";xdebug_debug_zval('a'); echo "<br/>";
$a = "abcd";
xdebug_debug_zval('a'); echo "<br/>";

сгенерирует o / p;

:
a: (refcount=1, is_ref=0)='abcd' 

изРуководство по PHP Основы подсчета ссылок : контейнер zval создается при создании новой переменной *1016* с постоянным значением

Означает ли это, что

1] Символ не создается, когда встречается код, аналогичный строке 1 кода2 , то есть $a;.Поскольку xdebug_debug_zval не находит символ / имя переменной 'a'.Согласно инструкции из Основы подсчета ссылок контейнер zval не создается.2] Символ создается только тогда, когда встречается код, аналогичный строке 3 кода2 , то есть $a = "abcd";.т. е. символ создается только тогда, когда переменная связана с постоянным значением и в соответствии с оператором из Основы подсчета ссылок Создается контейнер zval, связанный с символом 'a'.И эта строка 1 кода2, т.е. $a;, является бесполезной частью кода .

Для получения информации о посещении xdebug_debug_zval здесь .

1 Ответ

0 голосов
/ 24 декабря 2011

$b;
xdebug_debug_zval('b'); echo "<br/> ";
echo $b;

Приведенный выше код выведет:

Примечание: неопределенная переменная: b в /path/to/file/file.php в строке 'некоторый номер строки'

xdebug_debug_zval не выдает никакой ошибкихотя приведенный выше код !!

Назначение постоянного значения $ ba,

$b = "hello";
xdebug_debug_zval('b'); echo "<br/> ";
echo $b;

b: (refcount = 1, is_ref = 0) = 'привет' привет

Приведенный выше код доказывает, что «символ» / «имя переменной» создается только тогда, когда с ней связана константат.е.«Символ» / «имя переменной» создается только при наличии возможности создания zval.

Символ можно создать, если переменной присвоено NULL .

$b = null;
xdebug_debug_zval('b'); echo "<br/> ";
echo $b;

Приведенный выше код выведет:

b: (refcount = 1, is_ref = 0) = NULL

...