До сегодняшнего дня я думал, что достаточно хорошо понимаю, как работает статический модификатор.Я знаю, что (в терминах непрофессионалов) статическая переменная в функции не «сбрасывается» при вызовах этой функции, и я знаю, что статические переменные и функции в классе доступны путем вызова их через сам класс (не для создания экземпляров)класса).
Моя проблема заключается в следующем: сегодня я обнаружил, что если я объявлю статическую переменную внутри нестатической функции класса, всеэкземпляры этого класса совместно используют эту статическую переменную в отдельных вызовах функции-члена.
Например:
class A {
public function GetValue() {
static $value = 0;
$value++;
return $value;
}
}
$instance_1 = new A();
$instance_2 = new A();
echo $instance_1->GetValue();
echo $instance_1->GetValue();
echo $instance_2->GetValue();
echo $instance_2->GetValue();
echo $instance_1->GetValue();
echo $instance_1->GetValue();
Обратите внимание, что функция GetValue не объявлена как статическая или не используется статическим способом(как в, называется на самом классе).
Теперь я всегда предполагал, что это выведет: 121234
Вместо этого я обнаружу, что оно выдаст: 123456
Как я уже сказал, я бы понял это, если статическийпеременная $ value была внутри статической функции.Однако, учитывая, что он находится внутри нестатической функции, я просто предполагал, что он будет «привязан» только к функции «внутри» каждого отдельного экземпляра.
Полагаю, мой вопрос двоякий, тогда ... 1) это ошибка или ожидаемое поведение?2) другие языки обрабатывают эти «статические внутри нестатические» переменные таким же образом, или это уникально для PHP?