Из вашего комментария:
Я хочу убедиться, что я установил все требуемые свойства объекта, но если я неправильно наберу имя свойства, PHP просто добавляет новое свойство, и свойство, которое я хотел инициализировать, остается нулевым.
Если вы хотите убедиться, что вы установили все необходимые свойства объекта, подумайте о том, чтобы сделать их обязательными аргументами для конструктора, например,
class Item
{
public function __construct($required, $alsoRequired, $moreRequired)
{
// assign to corresponding properties
}
}
Таким образом, вы можете быть уверены, что объект находится в действительном состоянии.
Если вы не можете установить их при создании объекта, рассмотрите возможность добавления метода валидатора к вашему объекту. Вызовите этот метод, прежде чем делать какие-либо критические действия с вашим объектом, чтобы убедиться, что установлены все необходимые свойства. Это было бы гораздо более полезным дополнением к вашему API, чем реализация защиты от опечаток.
Кроме того, у вас не должно быть проблем с этим, если вы используете правильные сеттеры. Получите доступ к своему объекту через интерфейс вместо непосредственного назначения свойств. Если вы неправильно наберете имя метода, PHP сообщит вам (если вы не внедрили __call
).
В обозначениях __get
и __set
не являются ленивыми заменами для правильных добытчиков и сеттеров. Они являются перехватчиками, которые будут срабатывать при попытке доступа к недоступному свойству. Это гораздо больше связано с обработкой ошибок. Также обратите внимание, что они намного медленнее, чем правильные геттеры и сеттеры.