在php中动态添加新属性?

时间:2014-04-20 14:01:53

标签: php opencart

我最近阅读了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->(无存在属性)来添加新属性?如果可以,使用此方法的优点是什么,而不是使用通用方法在类中声明这些属性喜欢

    private $config;
    private $db;

1 个答案:

答案 0 :(得分:3)

这是一个错误。 PHP 允许使用您尚未声明的属性。

$config$db都是公开的,因为这是默认声明。

没有充分的理由使用未声明的属性。


这门课看起来很糟糕。输入为registry,但只需要"config""db",所以为什么不签名:

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

您还可以想知道名为Customer的对象(看起来像数据包装器)是否应该被赋予DB个对象。

基于所有其他私有变量,$db$config实际上似乎没有任何用处,因为它只是平面数据。