Доброго всем дня.
Попытка получить помощь на StackOverflow провалилась, может звезды на небе не так расположились, но на вопрос так внятного ответа я так и не получил, хотя обычно все не так, поэтому решил задать вопрос здесь. Я вообще не активный пользователь, мне документации PHP более чем хватает, но вот такой случай, что нужна помощь сообщества.
Решил вернуться в PHP после некоторого перерыва, начал писать систему "для себя", разработка идет нормально, архитектура системы в общем-то есть, кодовая база тоже есть, но вот остановился на этой проблеме.
Расширение MySQL устарело уже и морально, и вообще, как только можно, вначале я хотел работать с PDO, но пришел к выводу, что это лишнее и что объектно-ориентированного MySQLi мне более чем хватит.
В моей системе все системные ошибки отображаются в виде оформленной страницы, ошибки MySQLi не исключение, поэтому их нужно отлавливать.
В документации продемонстрирован вот такой способ делать это:
1. _Dark_ - 07 Февраля, 2013 - 19:17:01 - перейти к сообщению
(простой пример)
Мне этот способ не нравится, у меня происходит достаточно много вещей при возникновении ошибки, например, логирование, вызов событий и т.д.
Само собой я могу наследовать класс mysqli и сделать что-то вроде
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- class myMysqli {
- public function __construct(/* ... */)
- {
- parent::__construct(/* ... */);
- }
- public function query(/* .. */)
- {
- parent::query(/* ... */);
- if($this->errno !== 0)
- {
- // An error occurred
- }
- }
- }
- $mysqli = new myMysqli(/* ... */);
- $mysqli->query(/* ... */);
Проблема в том, что методов много, в практически каждом из них может произойти ошибка БД, мне придется переопределять все методы таким образом, что бы поймать ошибку.
На StackOverflow мне предложили работать с исключениями, но, честно говоря, я не очень понимаю их концепцию и принцип работы и вообще избегаю их, хотя верю в то, что это удобный инструменты для знающего кодера.
Как я понял, мне предлагали что-то вроде
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- try {
- $mysqli->query(/* ... */);
- } catch (Exception $e) {
- // An error occurred
- }