Динамическое добавление новых свойств в php?

Я недавно прочитал исходный код opencart, найдя этот код, который мне кажется странным

class Customer { private $customer_id; private $firstname; private $lastname; private $email; private $telephone; private $fax; private $newsletter; private $customer_group_id; private $address_id; public function __construct($registry) { $this->config = $registry->get('config');//no config property in the class $this->db = $registry->get('db');//no db property in the class 

Как можно использовать $ this -> (свойство none) для добавления новых свойств? И если это так, то какие профи используют этот подход, вместо того, чтобы использовать общий способ объявления этих свойств в классе, например

  private $config; private $db; 

Related of "Динамическое добавление новых свойств в php?"

Это ошибка. PHP позволяет использовать свойства, которые вы еще не объявили.

Оба $config и $db будут общедоступны, потому что это объявление по умолчанию.

Нет никаких оснований для использования необъявленных свойств.


Этот класс выглядит плохо разработанным. Вход представляет собой registry но ему нужны только "config" и "db" , поэтому почему подпись не является:

 public function __construct(DB $db, Config $config) 

Вы также можете задаться вопросом, должен ли объект с именем Customer (который выглядит как обертку данных) иметь объект DB .

На основе всех других частных переменных фактически нет смысла использовать $db и $config потому что это всего лишь плоские данные.