Предположим есть какая то абстрактная задача...
Стартует подключение к БД через расширяющий класс Model, затем начинает выполняться функция home() из класса Home дочернего для Controller.
По ходу выполнения этой функции происходят запросы к БД, затем ловится ошибка и идет обращение к функции наследуемого класса Controller, где происходит повторное создание подключения (???) и выполняется еще один запрос к БД. Листинг ниже представляется схематичным и не имеет прямых зависимостей.
Обертку для Mysqli использую
эту.
Вопросы:
- Нужно ли получать инстанс текущего mysqli класса и передавать его из дочернего класса контроллера (Home) в расширяемый (Controller)?
- Насколько это вообще имеет смысл?
- Правильно ли я понимаю, что при создании экземпляра, создается новое подключение или подключение держится по ходу всего выполнения текущего процесса?
class Mysqli {
public function __construct($host = null, $username = null, $password = null, $db = null, $port = null, $charset = 'utf8',
$socket = null) {
$isSubQuery = false;
if (is_array($host)) {
foreach ($host as $key => $val) {
$$key = $val;
}
}
$this->addConnection('default', [
'host' => $host,
'username' => $username,
'password' => $password,
'db' => $db,
'port' => $port,
'socket' => $socket,
'charset' => $charset
]);
if ($isSubQuery) {
$this->isSubQuery = true;
return;
}
if (isset($prefix)) {
$this->setPrefix($prefix);
}
self::$_instance = $this;
}
}
class Model extends Mysqli {
public function __construct() {
parent::__construct;
try {
$this->connect();
} catch (\Exception $exception) {
exit($exception->getMessage());
}
}
}
class Controller {
protected function error_log(string $error_type, int $error_code, string $comment){
$mysql = new Model;
$mysql->insert(.....);
}
}
class Home extends Controller {
public function home() {
$model = new Model;
for ($i = 0; $i <= 10; $i++) {
try {
//ищем край вселенной
$model->insert(.....);
//культивируем кукурузу
$model->update(.....);
} catch (\Exception $exception) {
//Чпок! Поймали ошибку
$this->error_log($this->error->get_error_type, $this->error->get_error_code, "Привет из центра галактики");
}
}
}
}