@md500

Что конкретно означает #[AllowDynamicProperties] в php ^8.2, 9?

В руководстве даются примеры типа:
#[AllowDynamicProperties]
class Test {}
 
// No deprecation warning
$obj = new Test;
$obj->bar = 1;

У меня же есть такой код(упрощен):
Пример 1
abstract class A {
   function __construct( string $param) {
     $this->value = $param;
  }
}
class B extends A {
   protected $value;
}

Здесь будет работать без #[AllowDynamicProperties] в php ^8.2, 9?
Пример 2
А здесь?
class C {
    function __construct(string $name, string $value) {
    $this->$name = $value
    }
}
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Ну вроде очевидно же.
И что означает, и что работать не будет.
С AllowDynamicProperties РНР позволяет объекту использовать взятые с потолка проперти, а без этой аннотации - нет.

при чем здесь пример 2 - я не понял. Это же просто типизация.
если бы там было продвижение свойств в конструкторе ,

class C {
    function __construct(public string $name, public string $value) {}
}

то разумеется, это будет работать, поскольку здесь свойства явно объявляются, просто в сокращённой форме
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы