@Vladimir-Hetman

Readonly и объект?

Оператор readonly устанавливает значения свойствам только один раз,
при инициализации и запрещает далее менять это значение, верно?

Ради интереса попробовал сделать такое с объектом.
Но почему-то, я могу устанавливать дефолтное значение свойству классу "say",
хотя readonly запрещает такое делать.
Что происходит в коде ниже, что здесь меняет readonly в классе "say"?

class User {                      
                                                                                                 
 function __construct(public readonly object $say){}  // установил readonly аргументу конструктора
 
 function text(){
  echo "i say:". $this->say->hi();
 }
 
}
 
 
class say{
 
 public $name ="da";  // дефолтное значение
 
 function hi(){
  return "hi";
 }
 
}
 
 
$obj = new User(new say);
$obj->text();
  • Вопрос задан
  • 99 просмотров
Решения вопроса 2
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
readonly для свойства класса,
перезаписать свойство с объектом в значении — значит записать туда ДРУГОЙ объект. Эквивалентность для объектов определяется хэшем
Объект тот же? Тот же. Значит мы не перезаписали!
Ответ написан
@Vitsliputsli
readonly не следит за изменением свойств объекта, если вам нужен иммутабельный объект - делайте специальный объект, либо создавайте его особым образом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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