Почему неявное объявление свойств в PHP?

Мне интересно, почему язык PHP допускает неявное объявление свойств, когда большинству языков необходимо определять свойства в самом объявлении класса (см. Код ниже). Существует ли практическое применение для такого типа кодирования?

$user1 = new User(); $user1->name = "Kylie"; echo $user1->name; class User{} 

Solutions Collecting From Web of "Почему неявное объявление свойств в PHP?"

Вариант использования – это объекты ценности

 $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).