Выполняет ли переопределенный конструктор PHP его дважды? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть класс, который открывает соединение с базой данных в своей функции __construct () и позволяет другим классам переопределять этот метод.

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

, а затем

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

У меня вопрос, когда конструктор уже открыл соединение с базой данных, и я позволю, например, своему классу темы переопределить этот конструктор (только потому, что мне нужен selfконструктор в теме) будет ли соединение с базой данных открываться дважды?

Я подумал о создании управляющей функции в моем классе БД, которая выглядит, если соединение уже есть, например:

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

Итак, это хорошая практика или, по крайней мере, хорошо?

Спасибо

РЕДАКТИРОВАТЬ: Извините, вчера я начал другой вопрос, и он был в кеше, поэтому название было изменено.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вы можете использовать статический член, чтобы избежать нескольких соединений.

Примерно так:

class db {
    public static $_connection = false;

    public function __construct() {
        if (!self::$_connection) {
            self::$_connection = $this->connect();
        }
        return self::$_connection;
    }
}
0 голосов
/ 06 июня 2018

Нет, он не выполняется дважды.По new theme.theme::__construct и выполняется только theme::__construct, поскольку оно переопределяет db::__construct.Внутри этой функции вы явно вызываете parent::__construct один раз, который выполняет db::__construct один раз.

Это было бы тривиально проверить, добавив оператор echo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...