@driverx18

Почему __get и __set не работают автоматически в PHP?

В PHP есть такие магические методы как __get() и __set(), они срабатывают тогда, когда мы обращаемся к несуществующему свойству (или устанавливаем его в случае __set()).
Но блин, если эти свойства не выставить, то если у нас есть допустим класс:
class Auto {
public $window;
}
$mitsubishi = new Auto();
$mitsubishi->windows = 10;

В этом случае, у объекта Mitshubishi будут и свойство window, и свойство windows. То есть пхп не помогает в том плане, что была опечатка. По моему другие языки просто бьют по рукам даже если обращаемся к несуществующему свойству, не говоря о том что задаем его.
Поэтому хочу спросить, какая логика в том, что пхп нам не говорит прямо, мол "Фатал эррор: обращение к несуществующему свойству *название свойства*" ?
  • Вопрос задан
  • 334 просмотра
Пригласить эксперта
Ответы на вопрос 2
Потому что тут как раз и нет ошибки. А вот если бы вы сделали так: echo $mitsubishi->windows;, то ошибка бы появилась.
Ответ написан
@BorisKorobkov Куратор тега PHP
Web developer
Да, PHP позволяет выстрелить себе в ногу.
При чтении несуществующего свойства будет Notice: Undefined property.
Но при записи в несуществующее свойство - оно будет автоматически создано. Это логично для PHP. Ведь вас не смущает, что при $mitsubishi = ... создается новая переменная, хотя вы могли описаться и иметь ввиду ранее созданную, например, $mitsubisi.

Если вы сторонник чистоты кода, то
1. пользуйтесь IDE и его подсказками
2. все свои классы extends от базового класса, который ловит __set и кидает Exception. При использовании фреймворков обычно так и рекомендуется
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы