<?phpБросать исключения ручками получается, а вот ловить неожиданные не хочет, хотя по логике должен (
try{
$fh = fopen("fakefile", "r");
echo'OK';
}
catch (Exception $e){
echo 'Ошибка открытия файла. '.$e->getMessage();
}
Спустя 15 минут, 48 секунд (8.01.2011 - 17:47) jetistyum написал(а):
ну потому что у тебя ф-я fopen не выбрасывает исключение
попробуй так
попробуй так
<?php
try{
$fh = fopen("fakefile", "r");
if (!$fh) {
throw new Exception('Unable to open file.');
}
else
echo'OK';
}
catch (Exception $e){
echo 'Ошибка открытия файла. '.$e->getMessage();
}
Спустя 10 минут, 47 секунд (8.01.2011 - 17:58) Nikitian написал(а):
Это-то как раз понятно. Хотел как в JS: завернул проблемный участок кода в try-catch и не паришься: если там возникнет проблема, то её решаешь без лишних алярмов. Бросать эксепшны самостоятельно - это одно, но далеко не всегда можно предвидеть, что например mysql_query() не сработает, т.к. слишком долго держится соединение или в процессе работы скрипта база перезагрузилась... Чтобы на каждый шаг не вешать проверки хотел вызов модуля в try-catch завернуть и повесить цепочку эксепшнов: сперва известные, потом неизвестные.
Спустя 9 минут, 11 секунд (8.01.2011 - 18:07) jetistyum написал(а):
Можешь попробовать поискать либу, в которой уже предусмотрены эксепшны, а сам пхп не выбрасывает исключения, может в 6 версии что-то изменится
Спустя 5 минут, 7 секунд (8.01.2011 - 18:12) Nikitian написал(а):
Странно. Думал это только у меня какая-то мега-бага засела, а это оказывается так и должно быть? Разочарован (
Вот тут например тоже в примерах примерно как у меня предлагается. Что за бред?
Вот тут например тоже в примерах примерно как у меня предлагается. Что за бред?
Спустя 3 минуты, 23 секунды (8.01.2011 - 18:16) jetistyum написал(а):
Читай внимательнее
Практика
Когда же удобно использовать исключения? Да всегда, когда функция или метод может прийти к ошибочной ситуации! На примере встроенной функции mysql_connect() и mysql_select_db(), если бы они бросала исключения при ошибке соединения и выборе базы данных соответственно, код выглядел бы так:
Практика
Когда же удобно использовать исключения? Да всегда, когда функция или метод может прийти к ошибочной ситуации! На примере встроенной функции mysql_connect() и mysql_select_db(), если бы они бросала исключения при ошибке соединения и выборе базы данных соответственно, код выглядел бы так:
try {
mysql_connect($hostname, $username, $password);
mysql_select_db($dbname);
} catch (Exception $e) {
echo $e->getMessage(); //выведет либо сообщение об ошибке подключения, либо об ошибке выбора
}
Спустя 4 минуты, 32 секунды (8.01.2011 - 18:20) Nikitian написал(а):
Йа креведко (:
Спустя 15 минут, 31 секунда (8.01.2011 - 18:36) Nikitian написал(а):
Решил такое поведение почти полностью:
Теперь выбрасывает нормальные эксепшны, кроме парсерроров и фаталов, но эти уж совсем плохо допускать на продакшн )
function error_handler($errorType, $message){
throw new Exception( $message, $errorType);
}
set_error_handler('error_handler');
Теперь выбрасывает нормальные эксепшны, кроме парсерроров и фаталов, но эти уж совсем плохо допускать на продакшн )
Спустя 5 минут, 35 секунд (8.01.2011 - 18:41) twin написал(а):
А что вообще ексепшенам на продакшене... во блин заворот кишок словоблудие... делать?
Спустя 9 минут, 22 секунды (8.01.2011 - 18:51) Nikitian написал(а):
Логироваться им там и выдавать пользователю что-то более интересное, нежели "Ooops", в зависимости от контекста. В случае с эксепшнами можно для каждого модуля и даже действия сделать собственную реакцию на ошибки, хотя обработчик изначально один.