Я недавно прочитал исходный код 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;
Это ошибка. PHP позволяет использовать свойства, которые вы еще не объявили.
Оба $config
и $db
будут общедоступны, потому что это объявление по умолчанию.
Нет никаких оснований для использования необъявленных свойств.
Этот класс выглядит плохо разработанным. Вход представляет собой registry
но ему нужны только "config"
и "db"
, поэтому почему подпись не является:
public function __construct(DB $db, Config $config)
Вы также можете задаться вопросом, должен ли объект с именем Customer
(который выглядит как обертку данных) иметь объект DB
.
На основе всех других частных переменных фактически нет смысла использовать $db
и $config
потому что это всего лишь плоские данные.