重写php构造函数会执行两次吗?

2skhul33  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(413)

我有一个类,它在它的\uu construct()函数中打开一个数据库连接,并让其他类重写这个方法。

class db {
    __construct() {
        $this->db = new mysqli();
    }
}

然后

class theme extends db {
    __construct() {
        parent::__construct();
        $doing_more_stuff;
    }
}

我的问题是当构造器已经打开了一个数据库连接,我让我的主题类重写这个构造器(仅仅因为我在主题中需要一个自构造器)数据库连接会被打开两次吗?
我考虑在我的db类中构建一个控制函数,该函数看起来是否已经有如下连接:

__construct() {
    if($no_connection) { $open_connection; } else { $use_opened_connection; }
}

那么,这是好的做法还是至少可以?
谢谢
编辑:对不起,昨天我又问了一个问题,因为它在缓存中,所以题目改了。

wh6knrhe

wh6knrhe1#

可以使用静态成员来避免多个连接。
像这样:

class db {
    public static $_connection = false;

    public function __construct() {
        if (!self::$_connection) {
            self::$_connection = $this->connect();
        }
        return self::$_connection;
    }
}
50few1ms

50few1ms2#

不,它不会执行两次。在 new theme . theme::__construct 而且只有 theme::__construct 执行,因为它覆盖 db::__construct . 在该函数中,显式调用 parent::__construct 一次,执行 db::__construct 一次。
通过添加 echo 语句…

相关问题