(Отредактировал этот вопрос, старая версия цитировала неверную версию RF C.)
RF C для типизированных свойств в PHP говорит, что " Если типизированное свойство unset()
, оно возвращается в неинициализированное состояние. " Однако в PHP 7.4 (по крайней мере, до 7.4.5) он, кажется, ведет себя по-разному, когда класс реализует __set()
, и, следовательно, он не совсем похож на (исходное) неинициализированное состояние. Функция magi c не вызывается, когда свойство неинициализировано впервые, но вызывается (неожиданно), когда свойство устанавливается снова после сброса. Пример кода .
<?php
class X {
public int $y;
public function __set($name, $value) {
echo "__set($name, $value) called";
$this->$name = $value;
}
}
$x = new X();
$x->y = 42; // Prints nothing, as expected.
unset($x->y);
$x->y = 43; // Prints `__set(y, 43) called`.
Я что-то пропускаю? Это ошибка в том, как PHP в настоящее время реализует unset()
для типизированных свойств? Или __set()
даже вызываться, когда неинициализированное типизированное свойство устанавливается впервые?