Статическая переменная в методе не сбрасывается при сбое экземпляра

Интересное поведение в PHP 5.6.12-arm и PHP 7 RC3 (хотя я полагаю, что так во всех версиях, я просто хотел отметить, какие версии я использовал для тестирования):

Пример — использование статической переменной внутри метода класса

<?php
class Foo {
public function Bar() {
static $var = 0;

return ++$var;
}
}

$Foo_instance = new Foo;

print $Foo_instance->Bar(); // prints 1
print PHP_EOL;

unset($Foo_instance);

$Foo_instance2 = new Foo;

print $Foo_instance2->Bar(); // prints 2 - but why?
print PHP_EOL;
?>

Вопрос: Как можно напечатать 2, так как мы удалили весь экземпляр перед повторным вызовом Foo-> Bar ()?

Обратите внимание, что этот вопрос и его ответы не отвечают на мой вопрос.

С наилучшими пожеланиями.

1

Решение

Вы можете посмотреть в документации PHP область видимости переменных.

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

Таким образом, статическая переменная не связана ни с одним экземпляром.

1

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

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

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