从另一个类访问MySQLi连接

时间:2013-11-23 11:03:47

标签: php oop mysqli

这是我的文件atm: - class.core.php - class.site.php - global.php

我正在尝试访问从Core到Site的数据库连接。我已经尝试了一切,没有任何作用。

class.core.php:

class Core {

    public $db;

    public $host = "localhost";
    public $username = "root";
    public $password = "***";
    public $dbname = "***";

    public function __construct() {

        $this->db = new mysqli($this->host, $this->username, $this->password, $this->dbname);
        if($this->db->connect_errno) {

            echo $this->db->connect_error();

            die();

        }

        return $this->db;

    }

}

class.site.php:

class Site {

    public $db;

    public function __construct(Core $db) {

        $this->db = $db->db;

    }

}

global.php:

require_once("_classes/class.core.php");
require_once("_classes/class.site.php");

$core = new Core();
$site = new Site();

我需要得到所有帮助。谢谢:))

1 个答案:

答案 0 :(得分:1)

我认为你误解了构造函数是如何工作的。首先,构造函数不返回任何内容,因此您不应该从构造函数返回任何内容。我不知道(从未尝试过)返回任何东西,但它在那里看起来很奇怪。

其次你几乎了解了依赖注入的想法......站点需要一个DB,然后通过它的构造函数注入一个DB,如:

$core = new Core();
$site = new Site($core->db);

不要求太多的东西,而不是要求你的网站工作的核心,需要一个mysqli,因为这就是你想要的......

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

这将稍微隔离您的依赖项并尽可能地解开您的代码。

最后但并非最不重要的是,避免使用die()/ exit(),使用异常,并干净地处理它们。 Die对于用户来说非常有用,并且看起来不太好。通过抛出异常并以漂亮的方式处理它们来正确处理数据库问题等异常!

否则,您当前的代码没有理由不起作用,这是其他不起作用的东西,我们看不到它!