PHP: Как я могу обнаружить «@» перед вызовом в моем собственном обработчике ошибок? - PullRequest
1 голос
/ 14 сентября 2009

У меня есть собственный обработчик ошибок, связанный с ошибками PHP E_ALL.

Во внешней библиотеке вызов $row = @mysql_fetch_assoc($this->result); вызывает предупреждения PHP, полученные моим обработчиком. Зачем? Не должен ли '@' заставить PHP игнорировать это?

Мой вопрос: есть ли способ определить (в моем обработчике ошибок), что использовался «@»?

Ответы [ 2 ]

4 голосов
/ 14 сентября 2009

Ссылка Руководство по PHP на set_error_handler показывает

Важно помнить, что стандартный обработчик ошибок PHP полностью обойден. Отчет об ошибках() настройки не будут иметь никакого эффекта, и ваш будет вызван обработчик ошибок независимо от того - однако вы все еще в состоянии прочитать текущее значение error_reporting и действуйте соответствующим образом. Особо следует отметить, что это значение будет равно 0, если вызвал ошибку был добавлен @ оператор контроля ошибок.

Чтобы вы могли сделать это:

function my_error_handler($errno, $errstr) {
  if (error_reporting() == 0) { // called with @
    return;
  }
  //....
}
3 голосов
/ 14 сентября 2009

Быстрый просмотр руководства по PHP показал следующее:

Важно помнить, что стандартный обработчик ошибок PHP полностью обойден. Отчет об ошибках() настройки не будут иметь никакого эффекта, и ваш будет вызван обработчик ошибок независимо от того - однако вы все еще в состоянии прочитать текущее значение error_reporting и действуйте соответствующим образом. Особо следует отметить, что это значение будет равно 0, если вызвал ошибку был добавлен @ оператор контроля ошибок.

http://de.php.net/manual/en/function.set-error-handler.php

Кстати, использование оператора @ считается плохим стилем для некоторых людей.

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