Мне интересно, почему язык PHP допускает неявное объявление свойств, когда большинству языков необходимо определять свойства в самом объявлении класса (см. Код ниже). Существует ли практическое применение для такого типа кодирования?
$user1 = new User(); $user1->name = "Kylie"; echo $user1->name; class User{}
Вариант использования – это объекты ценности
$a = new stdClass; $a->something = 12; $a->somethingElse = 'Hello World'; myFunction ($a);
Это позволяет создавать некоторые объекты, которые просто переносят структурированные данные (что-то вроде structs
на других языках), без необходимости определять для него класс.
Другое дело, что – потому что PHP в любом случае слабо типизирован – нет никакой реальной причины запретить его. Если вам нужно что-то более сильное, перегрузите __set()
public function __set ($propertyName, $value) { throw new Exception("Undefined Property $propertyName"); }
попытайтесь отключить подавление предупреждений, и такое объявление не будет казаться таким подразумеваемым больше))
Я бы сказал, что это происходит из-за того, что php был и остается довольно слабым по отношению к этим типам данных, и поддерживать хотя бы небольшую совместимость с нисходящей связью для скриптов, написанных в более ранней версии php (<5).