Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: php исключения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
kostyan
Отправлено: 15 Августа, 2012 - 09:12:55
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




из мануала
http://php.net/manual/ru/language.exceptions.php

"Нормальное выполнение (когда не генерируются исключения в блоках try или когда класс сгенерированного исключения не совпадает с классами, объявленными в соответствующих блоках catch) будет продолжено за последним блоком catch."
и
"При генерации исключения код следующий за оператором throw исполнен не будет, а PHP предпримет попытку найти первый блок catch, перехватывающий исключение данного класса. Если исключение не будет перехвачено, PHP выдаст сообщение об ошибке: "Uncaught Exception ...""

как то непонятно что будет если исключение не будет поймано:
будет продолжено за последним блоком catch
или
PHP выдаст сообщение об ошибке

спасибо.
 
 Top
SkaN
Отправлено: 15 Августа, 2012 - 09:16:53
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Если исключение поймать в блоке catch, то ясно, что можно самому задать действие. А если не поймать, то PHP сформирует Fatal error
 
 Top
DlTA
Отправлено: 15 Августа, 2012 - 09:24:10
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




kostyan пишет:
как то непонятно что будет если исключение не будет поймано:
будет продолжено за последним блоком catch
или
PHP выдаст сообщение об ошибке

код пойдет спокойно выполняться дальше, и при этом не заходя в блок catch
 
 Top
kostyan
Отправлено: 15 Августа, 2012 - 09:26:30
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




SkaN пишет:
Если исключение поймать в блоке catch, то ясно, что можно самому задать действие. А если не поймать, то PHP сформирует Fatal error


это понятно, только в мануале написано что

"когда класс сгенерированного исключения не совпадает с классами, объявленными в соответствующих блоках catch) будет продолжено за последним блоком catch."

как понимаю когда исключение не поймано, или что они имеют ввиду?
 
 Top
DlTA
Отправлено: 15 Августа, 2012 - 09:33:50
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




kostyan пишет:
как понимаю когда исключение не поймано, или что они имеют ввиду?
а там где вы читаете примеров нет?
 
 Top
kostyan
Отправлено: 15 Августа, 2012 - 09:36:32
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




че то как то не осядет...

так когда при не пойманном исключение будет:

PHP выдаст сообщение об ошибке

а когда

будет продолжено за последним блоком catch
 
 Top
DelphinPRO
Отправлено: 15 Августа, 2012 - 10:05:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




если исключение возникнет НЕ В БЛОКЕ try то будет fatal error
если исключение возникает ВНУТРИ БЛОКА try то
1. если данное исключение перехватывается блоком catch, выполнится этот блок
2. если данное исключение не перехватывается блоком catch, продолжится выполнение программы за пределами catch
PHP:
скопировать код в буфер обмена
  1. class MyException extend Exception {}
  2. class TwoException extend Exception {}

PHP:
скопировать код в буфер обмена
  1. throw new MyException('my error!'); // fatal error
  2. echo 'ok'; // не выполнится

PHP:
скопировать код в буфер обмена
  1. try {
  2.     throw new MyException('my error!'); // будем искать блок catch
  3. } catch ($e MyException) {
  4.     echo $e->message; // выводим 'my error!' и продолжаем
  5. }
  6. echo 'ok'; // выполнится

PHP:
скопировать код в буфер обмена
  1. try {
  2.     throw new MyException('my error!'); // будем искать блок catch
  3. } catch ($e TwoException) {
  4.     echo $e->message; // этот блок не выполнится, потому что ловится исключение TwoException, а выброшено MyException
  5. }
  6. echo 'ok'; // выполнится


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Августа, 2012 - 10:14:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Последний пример будет fatal error, без echo "ok". Т.к. брошенное MyException не поймали.


-----
PostgreSQL DBA
 
 Top
Stierus Супермодератор
Отправлено: 15 Августа, 2012 - 10:24:46
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Все очень просто. Сгенерированное исключение должно быть поймано блоком catch. Не будет выполнено ровным счетом ничего между строкой, где сгенерировано исключение и блоком catch, который это исключение отловил. Если такого блока нет вообще - получите fatal error.

Касательно
Цитата:
"когда класс сгенерированного исключения не совпадает с классами, объявленными в соответствующих блоках catch) будет продолжено за последним блоком catch."

как понимаю когда исключение не поймано, или что они имеют ввиду?
Описывается ситуация, когда у вас несколько типов исключений и несколько блоков их обработки. На примере будет понятнее:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class Exception1 extends \Exception{}
  3. class Exception2 extends \Exception{}
  4. class Exception3 extends \Exception{}
  5.  
  6. try{
  7.   try{
  8.     try{
  9.       echo "Started<br/> \r\n";
  10.       throw new Exception1(); //Если заменить на throw new Exception(); - получишь fatal error, потому что блока catch, который обрабатывает исключения типа Exception нет :)
  11.     }
  12.     catch(Exception2 $e){
  13.       echo "Exception2 catched<br/> \r\n";
  14.     }
  15.     echo "exception was Exception2<br/> \r\n";
  16.   }
  17.   catch(Exception3 $e){
  18.     echo "Exception3 catched<br/> \r\n";
  19.   }
  20.   echo "exception was Exception2 or Exception3<br/> \r\n";
  21. }
  22. catch(Exception1 $e){
  23.   echo "Exception1 catched<br/> \r\n";
  24. }
  25. echo "exception was Exception2 or Exception3 or Exception1<br/> \r\n";
 
My status
 Top
kostyan
Отправлено: 15 Августа, 2012 - 11:41:42
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




оказывается действительно не так все просто, половина ответов не правильные...

Stierus, спасибо, доходчиво растолковали.
 
 Top
Stierus Супермодератор
Отправлено: 15 Августа, 2012 - 12:00:42
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Часто люди объясняют то, что сами до конца не понимают Улыбка
 
My status
 Top
caballero
Отправлено: 15 Августа, 2012 - 12:05:05
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
оказывается действительно не так все просто, половина ответов не правильные...

Потму и существуют мануалы. На форумах большинство таких же как ты.

Цитата:
Часто люди объясняют то, что сами до конца не понимают

Скорее - не могут правильно сформулировать мысль. Для этого тоже нужно определенное умение.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB