繁体   English   中英

PHP ::存储数据库连接与静态实例化

[英]PHP :: Storing a database connection v. static instantiation

以下哪种方法在PHP中更有效(或精通)?

class Amazing {
    protected $db;

    public function __construct () {
         $this->db = new Database::getInstance();
    }

    public function do ($blah) {
         $this->db->doInsert($blah);
    }

    public function again ($blah) {
         $this->db->doUpdate($blah);
    }
}

要么:

class Less_Amazing {

    public function do ($blah) {
         $db = new Database::getInstance();
         $db->doInsert($blah)
    }

    public function again ($blah) {
         $db = new Database::getInstance();
         $db->doUpdate($blah)
    }
}

一品脱啤酒就在答案上。

我建议在这种情况下使用依赖注入。 您的班级应尽可能少依赖其他班级。 通过依赖项注入构建对象时,应提供任何依赖项。 每个班级应遵循“单一责任”原则,即每个班级应负有单一责任。 通过控制反转可以启用依赖项注入。 这意味着Amazing类不必创建数据库连接的实例。 通过构造函数注入为它提供了一个数据库连接对象,而它要做的就是完成其“惊人的工作” :)

$db = new Database::getInstance();
$amazing = new Amazing($db);

class Amazing {
    protected $db;

    public function __construct ($db) {
         $this->db = $db;
    }

    public function do ($blah) {
         $this->db->doInsert($blah);
    }

    public function again ($blah) {
         $this->db->doUpdate($blah);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM