从另一个类访问MySQLi连接


Accessing MySQLi connection from another class

这是我的文件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();

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

我认为您误解了构造函数的工作方式。首先,构造函数不返回任何内容,因此不应该从构造函数返回某些内容。我不知道(从未尝试过)归还任何东西,但里面看起来很奇怪。

其次,您几乎了解了依赖项注入背后的想法。。。站点需要一个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(),使用异常,并干净地处理它们。死亡对用户来说是非常不必要的,而且看起来不太好。通过抛出异常并以漂亮的方式处理异常,正确处理数据库问题等异常!

否则,您当前的代码没有不工作的原因,它是其他不工作的东西,我们看不到它!