статическая память в функциях [PHP]

У меня есть функция исследования со статической переменной, давайте посмотрим следующий код:

(Внимание! Для тестирования вы должны включить 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

Информация: при вызове функции не используется переменный аргумент, что не вызывает проблем с выводом информации. Поэтому с учетом аргументов используется имя переменной, записанной в строку

0

Решение

Доступ к статическим переменным в PHP создает ссылку на внутренний массив статики при использовании.

Вы можете убедиться в этом, заметив, что невозможно хранить ссылки в статических переменных:

function a() {
static $var = 1;
var_dump($var);
$var = &$ref;
$var = 2;
}
a(); a();
// prints int(1) int(1)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]