Правильно ли я строю свое приложение ?

AnrDaemon

Продвинутый новичок
Хотя

Вот спасибо. Знатно я затупил. И ведь знал же пр эту особенность, но ничего в голове не зазвенело, когда копировал код из safemysql
Не за что, я сам буквально на неделе код переписывал и примеривался к array_merge вместо пары зубодробительных конструкций (там жуткий легаси, не спрашивайте).
Так что пришлось внимательно изучать особенности работы разных array_* функций.
Ну, заодно по всем своим проектам пробежался после того, как понял засаду. Пришлось срочно менять только в паре мест, но и там они, по счастью, влияли только теоретически, ибо обычно использовались строковые (альфа) ключи. Вероятность строкового ключа из цифр исключать нельзя, но я особо дёргаться не стал. В VCS поправил, будет время - запилю на лайв.
 

AnrDaemon

Продвинутый новичок
Ещё одна эпичная хренюшка.
Чтобы поймать ВСЕ ошибки при подключении к БД в эксепшены, единственный вариант - повесить свой хэндлер.
PHP:
try
{
  set_error_handler(function($s, $m, $f, $l, $c) { throw new ErrorException($m, 0, $s, $f, $l); });
  $pdo = new Wrappers\DbmMysql($pdoDSN, "$pdoUser", $pdoPass);
}
catch(PDOException $e)
{
  $key = get_class($e) . "#" . md5(time() . mt_rand());
  error_log($key);
  error_log($e);
  die("Unable to connect to the database (code {$e->getCode()}, key $key).");
}
finally
{
    restore_error_handler();
}
Иначе такие ошибки, как неверное имя хоста БД, имеют все шансы вылиться на землю в браузер пользователя при некорректной настройке PHP.
Причём вместе с паролями.
 

Фанат

oncle terrible
Команда форума
Ещё одна эпичная хренюшка.
Чтобы поймать ВСЕ ошибки при подключении к БД в эксепшены, единственный вариант - повесить свой хэндлер.
Мне кажется, это уже перебор.
В Симфони ты имеешь обычное сообщение об ошибке, с бэктрейсом и параметрами.

Не говоря уже о том, что вываливать "Unable to connect to the database" в браузер is frowned upon.
 

AnrDaemon

Продвинутый новичок
Это был ПРИМЕР.
И потом в либе я сделал
PHP:
    try
    {
      set_error_handler(function($s, $m, $f, $l, $c = null) { throw new ErrorException($m, 0, $s, $f, $l); });
      parent::__construct($dsn, $username, $password, $options);
      restore_error_handler();
    }
    catch(Exception $e)
    {
      restore_error_handler();
      throw $e;
    }
Ибо finally 5.5+ only.
PDO подцепляет ошибки из стека как $previous. Что удобно для разбора полётов, но совершенно не нужно знать юзеру в браузере.
 

Фанат

oncle terrible
Команда форума
Fatal error: Uncaught ArgumentCountError: Too few arguments to function Modules\User1
Через класс MyPDO только что вытаскивал данные из БД. Даже не знаю что ему не нравится тут ТТ
На тостере ты привел сейчас полный текст ошибки, а здесь почему-то написал обрезанное.
 
Сверху