try{
eval('<?php echo "fsdfsdf; ');
}catch(Exception $e){
echo $e->getMessage();
}
// or
try{
$v = new fsdfsdf();
}catch(Exception $e){
echo $e->getMessage();
}
Почему он не выкидывает исключение? А сразу мне 503 показывает!
Разве try ест только те ошибки, которые связаны с делениями на ноль и всякие мелочи?
Или есть что-то другое?
Спустя 50 минут, 42 секунды (10.11.2011 - 15:59) linker написал(а):
Исключения и ошибка при интерпретации кода - это разные вещи. Ошибки генерит PHP, а исключения - код. Если где-то в скрипте или php-библиотеки не было явного
throw new Exception('Я исключение, произошла ошибка');то значит не было исключения, а раз его не было то и ловить нечего. Ещё повторю, что исключения генерит программист, а ошибки при интерпретации - непосредственно PHP и ловятся они через подмену в set_error_handler(), где собственно можно это дело завернуть в эксепшен.
function test($a)Заворачиваем ошибки в эксепшен, о том какие ошибки можно перехватывать написано в PHP-мануале
{
if ($a === null)
throw new Exception('Значение переменной $a не может быть равным null');
}
try
{
test(null);
}
catch(Exception $e)
{
echo $e->getMessage();
}
function myError($num, $msg, $file, $line)
{
throw new Exception($msg);
}
set_error_handler('myError', E_ALL);
try
{
echo $a; // Генерим NOTICE, который будет говорить о том, что переменная $a не определена
}
catch(Exception $e)
{
echo 'Тут ошибочка в PHP-коде : ' . $e->getMessage();
}
Спустя 48 минут, 1 секунда (10.11.2011 - 16:47) sharki написал(а):
linker
Спасибо за разъяснение, почитал еще ман по этой теме, ничего нету для фильтрования ВСЕХ ошибок, а именно то, что я привел в пример
Спасибо за разъяснение, почитал еще ман по этой теме, ничего нету для фильтрования ВСЕХ ошибок, а именно то, что я привел в пример
Спустя 10 минут, 2 секунды (10.11.2011 - 16:57) m4a1fox написал(а):
sharki
Цитата |
нету для фильтрования ВСЕХ ошибок |
Для всех и не получится! Нужно отдельно классы делать для исключительных ситуаций а родителем у них - один общий класс Exception. ИМХО!
Спустя 6 минут, 58 секунд (10.11.2011 - 17:04) sharki написал(а):
m4a1fox
Нет, ты не понял, почитай пост linker про класс Exception. А я говорю про ошибки типа создания несуществующего класса, или выполнение кода евалом с ошибкой в подаваемой строке.
Нет, ты не понял, почитай пост linker про класс Exception. А я говорю про ошибки типа создания несуществующего класса, или выполнение кода евалом с ошибкой в подаваемой строке.
Спустя 3 часа, 53 минуты, 1 секунда (10.11.2011 - 20:57) Nikitian написал(а):
function error_handler($errorType, $message, $errfile, $errline){
throw new Exception( strip_tags($message).' in ['.$errfile.'] on '.$errline.' line', $errorType);
}
function fatalErrorShutdownHandler() {
$last_error = error_get_last();
if ($last_error['type'] === E_ERROR) {
// fatal error
error_handler(E_ERROR, $last_error['message'], $last_error['file'], $last_error['line']);
}
}
set_error_handler('error_handler');
register_shutdown_function('fatalErrorShutdownHandler');
как-то так
Спустя 4 минуты, 24 секунды (10.11.2011 - 21:01) sharki написал(а):
Nikitian
Спасибо) Завтра на работе гляну.
Спасибо) Завтра на работе гляну.
Спустя 12 часов, 8 минут, 53 секунды (11.11.2011 - 09:10) sharki написал(а):
Nikitian
Не, все равно при таком коде
Не срабатывает try
Не, все равно при таком коде
function error_handler($errorType, $message, $errfile, $errline){
throw new Exception( strip_tags($message).' in ['.$errfile.'] on '.$errline.' line', $errorType);
}
function fatalErrorShutdownHandler() {
$last_error = error_get_last();
if ($last_error['type'] === E_ERROR) {
// fatal error
error_handler(E_ERROR, $last_error['message'], $last_error['file'], $last_error['line']);
}
}
set_error_handler('error_handler');
register_shutdown_function('fatalErrorShutdownHandler');
try{
$v = new fsdfsdf();
}catch(Exception $e){
echo $e->getMessage();
}
Не срабатывает try
Спустя 46 минут, 17 секунд (11.11.2011 - 09:56) linker написал(а):
Потому, что не срабатывает функция error_handler(). А не срабатывает она потому, что в твоём коде ошибка из типа FATAL, когда продолжение работы скрипта не возможно и ядро PHP прерывает его работу. Открой уже мануал и почитай, какие типы ошибок можно перехватывать, а какие нет.