"Нормальное выполнение (когда не генерируются исключения в блоках try или когда класс сгенерированного исключения не совпадает с классами, объявленными в соответствующих блоках catch) будет продолжено за последним блоком catch."
и
"При генерации исключения код следующий за оператором throw исполнен не будет, а PHP предпримет попытку найти первый блок catch, перехватывающий исключение данного класса. Если исключение не будет перехвачено, PHP выдаст сообщение об ошибке: "Uncaught Exception ...""
как то непонятно что будет если исключение не будет поймано: будет продолжено за последним блоком catch
или PHP выдаст сообщение об ошибке
спасибо.
SkaN
Отправлено: 15 Августа, 2012 - 09:16:53
Гость
Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011
Помог: 0 раз(а)
Если исключение поймать в блоке catch, то ясно, что можно самому задать действие. А если не поймать, то PHP сформирует Fatal error
DlTA
Отправлено: 15 Августа, 2012 - 09:24:10
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
kostyan пишет:
как то непонятно что будет если исключение не будет поймано:
будет продолжено за последним блоком catch
или
PHP выдаст сообщение об ошибке
код пойдет спокойно выполняться дальше, и при этом не заходя в блок catch
kostyan
Отправлено: 15 Августа, 2012 - 09:26:30
Новичок
Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
SkaN пишет:
Если исключение поймать в блоке catch, то ясно, что можно самому задать действие. А если не поймать, то PHP сформирует Fatal error
это понятно, только в мануале написано что
"когда класс сгенерированного исключения не совпадает с классами, объявленными в соответствующих блоках catch) будет продолжено за последним блоком catch."
как понимаю когда исключение не поймано, или что они имеют ввиду?
DlTA
Отправлено: 15 Августа, 2012 - 09:33:50
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
kostyan пишет:
как понимаю когда исключение не поймано, или что они имеют ввиду?
а там где вы читаете примеров нет?
kostyan
Отправлено: 15 Августа, 2012 - 09:36:32
Новичок
Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
че то как то не осядет...
так когда при не пойманном исключение будет:
PHP выдаст сообщение об ошибке
а когда
будет продолжено за последним блоком catch
DelphinPRO
Отправлено: 15 Августа, 2012 - 10:05:48
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
если исключение возникнет НЕ В БЛОКЕ try то будет fatal error
если исключение возникает ВНУТРИ БЛОКА try то
1. если данное исключение перехватывается блоком catch, выполнится этот блок
2. если данное исключение не перехватывается блоком catch, продолжится выполнение программы за пределами catch
throw new MyException('my error!');// будем искать блок catch
} catch ($e TwoException){
echo$e->message;// этот блок не выполнится, потому что ловится исключение TwoException, а выброшено MyException
}
echo'ok';// выполнится
----- Чем больше узнаю, тем больше я не знаю.
Мелкий
Отправлено: 15 Августа, 2012 - 10:14:52
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Последний пример будет fatal error, без echo "ok". Т.к. брошенное MyException не поймали.
----- PostgreSQL DBA
Stierus
Отправлено: 15 Августа, 2012 - 10:24:46
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Все очень просто. Сгенерированное исключение должно быть поймано блоком catch. Не будет выполнено ровным счетом ничего между строкой, где сгенерировано исключение и блоком catch, который это исключение отловил. Если такого блока нет вообще - получите fatal error.
Касательно
Цитата:
"когда класс сгенерированного исключения не совпадает с классами, объявленными в соответствующих блоках catch) будет продолжено за последним блоком catch."
как понимаю когда исключение не поймано, или что они имеют ввиду?
Описывается ситуация, когда у вас несколько типов исключений и несколько блоков их обработки. На примере будет понятнее:
throw new Exception1();//Если заменить на throw new Exception(); - получишь fatal error, потому что блока catch, который обрабатывает исключения типа Exception нет :)
}
catch(Exception2 $e){
echo"Exception2 catched<br/> \r\n";
}
echo"exception was Exception2<br/> \r\n";
}
catch(Exception3 $e){
echo"Exception3 catched<br/> \r\n";
}
echo"exception was Exception2 or Exception3<br/> \r\n";
}
catch(Exception1 $e){
echo"Exception1 catched<br/> \r\n";
}
echo"exception was Exception2 or Exception3 or Exception1<br/> \r\n";
kostyan
Отправлено: 15 Августа, 2012 - 11:41:42
Новичок
Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
оказывается действительно не так все просто, половина ответов не правильные...
Stierus, спасибо, доходчиво растолковали.
Stierus
Отправлено: 15 Августа, 2012 - 12:00:42
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Часто люди объясняют то, что сами до конца не понимают
caballero
Отправлено: 15 Августа, 2012 - 12:05:05
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
оказывается действительно не так все просто, половина ответов не правильные...
Потму и существуют мануалы. На форумах большинство таких же как ты.
Цитата:
Часто люди объясняют то, что сами до конца не понимают
Скорее - не могут правильно сформулировать мысль. Для этого тоже нужно определенное умение.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.