У меня есть функция исследования со статической переменной, давайте посмотрим следующий код:
(Внимание! Для тестирования вы должны включить xdebug в php.ini)
function a()
{
static $var = 10;
xdebug_debug_zval('var');
return $var;
}
a();
Выводится следующее: var:(refcount=2, is_ref=1),int 10
В чем дело? Почему refcount=2
? Где вторая ссылка?
П.С. Так что, если у нас есть var:(refcount=2, is_ref=1),int 10
, Это означает, что мы не можем сохранить ссылку в статической переменной.
Для пользователя Mark Baker
function a()
{
$var = 10;
xdebug_debug_zval('var');
return $var;
}
a();
Выходы: var:(refcount=1, is_ref=0),int 10
Информация: при вызове функции не используется переменный аргумент, что не вызывает проблем с выводом информации. Поэтому с учетом аргументов используется имя переменной, записанной в строку
Доступ к статическим переменным в PHP создает ссылку на внутренний массив статики при использовании.
Вы можете убедиться в этом, заметив, что невозможно хранить ссылки в статических переменных:
function a() {
static $var = 1;
var_dump($var);
$var = &$ref;
$var = 2;
}
a(); a();
// prints int(1) int(1)
Других решений пока нет …