Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数据库类传递给构造函数?_Php_Mysql - Fatal编程技术网

Php 将数据库类传递给构造函数?

Php 将数据库类传递给构造函数?,php,mysql,Php,Mysql,什么是更好的做法?要传递数据库还是打开数据库?当我将数据库传递给构造函数时,我无法自动完成(NetBeans PHP IDE) class Item { private $name; private $database; public function __construct($database, $id) { $information = $database->fetchSingleRow($id); $this->dat

什么是更好的做法?要传递数据库还是打开数据库?当我将数据库传递给构造函数时,我无法自动完成(NetBeans PHP IDE)

class Item {
    private $name;
    private $database;

    public function __construct($database, $id) {
        $information = $database->fetchSingleRow($id);

        $this->database = $database;
        $this->name = $information['name'];
    }
}
我应该这样做吗

class Item {
    private $name;
    private $database;

    public function __construct($id) {
        $this->database = new Database();
        $this->database->open();
        $this->database->select('test'); // selects test table

        $information = $this->$database->fetchSingleRow($id);
        $this->name = $information['name'];
    }

    public function __destruct() {
        unset($this->item);
        $this->database->close();
    }
}
有几件事:

  • DB对象通常最好通过factory/singelton/registery获取,而不要四处移动。除非您能够在一个请求中保留数千个打开的连接
  • 如果您想要自动完成-在函数声明中添加一个类型提示

  • 我个人会将其作为参数传递到构造函数中。如果您有多个Item实例,那么每次都会创建一个新连接,这会给数据库带来压力。

    已经介绍过,每次创建Item时创建一个新的数据库实例会给数据库带来压力,但我还想指出,这确实不是一个好的设计决策

    这里的主要问题是你没有遵循设计速度的“原则”。如果您要让Item创建一个新的数据库对象,那么如果您想更改有关数据库创建/打开方式等的任何内容,您将遇到问题。您必须更改创建新数据库实例的代码库中的任何地方。因此没有准备好改变

    public function toto(DataBaseClass $MyDB,array $params){...}