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 :: throw new Exception

 PHP.SU

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


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

> Описание: зачем столько слови, или что еще можно бросать?
DlTA
Отправлено: 08 Августа, 2012 - 13:43:33
Post Id



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


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


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




порядок выбрасывания исключения
throw new Exception([$text]);
стандартная запись которая используется в нескольких языках (в с# так же кажись)

раньше оно мне просто не нравилось, а щас созрел для вопроса, а что еще можно бросать кроме исключений? если ничего то зачем тогда вообще это бросание.?
 
 Top
EuGen Администратор
Отправлено: 08 Августа, 2012 - 14:07:58
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Не понял сути вопроса. То есть Вам не нравится эта стандартная языковая конструкция? Если так, то, думаю, более уместно будет написать Расмусу Ледорфу.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DlTA
Отправлено: 08 Августа, 2012 - 14:24:11
Post Id



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


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


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




вопрос в другом, что еще можно выбрасывать кроме исключений.
 
 Top
Stierus Супермодератор
Отправлено: 08 Августа, 2012 - 14:24:36
Post Id



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


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


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




от исключений можно наследоваться ...
 
My status
 Top
DlTA
Отправлено: 08 Августа, 2012 - 14:28:59
Post Id



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


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


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




вопрос не в том что написано в доках, их я полистал,
например фраза throw new Exception([$text]); (о наследовании от основного класса ислючений вкурсе)
понимается так:
выбросить объект класса исключение

что еще можно выбросить и куда? (плз. без шуток на эту реплику))
 
 Top
DelphinPRO
Отправлено: 08 Августа, 2012 - 15:34:32
Post Id



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


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


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





- выбросить нафиг юзера из системы Улыбка

сорри за оффтопик Улыбка)


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
EuGen Администратор
Отправлено: 08 Августа, 2012 - 15:51:05
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Все, что предполагается к использованию в throw должно быть наследовано от базового класса Exception. Ничего иного "выбросить" не получится. (а если бы и получилось - в чем смысл?)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DlTA
Отправлено: 09 Августа, 2012 - 17:55:34
Post Id



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


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


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




EuGen пишет:
Все, что предполагается к использованию в throw должно быть наследовано от базового класса Exception. Ничего иного "выбросить" не получится. (а если бы и получилось - в чем смысл?)

всмыс в том что в данном случае как минимум одно слово в конструкции (в моем понимании) лишнее
throw new Exception
ну вот если нельзя больше нигде это использовать то для чего это было расчитано, может таки что еще по расчетом должно было кидаться?
 
 Top
OrmaJever Модератор
Отправлено: 09 Августа, 2012 - 18:10:07
Post Id



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


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


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




Бросать моджно только обьекты, если бросить например функцию
то будет ошибдка
CODE (htmlphp):
скопировать код в буфер обмена
  1. Fatal error: Can only throw objects in ...

Тоесть проблема в одном лишнем слове new, а если бы его небыло (throw Exceprion) было бы понятне и вопроса не возникло? Оно просто обозначает создание обьекта и всё.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DlTA
Отправлено: 09 Августа, 2012 - 18:59:23
Post Id



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


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


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




OrmaJever пишет:
Бросать моджно только обьекты, если бросить например функцию



Fatal error: Exceptions must be valid objects derived from the Exception base class
тоесть не только объект, а наследуемый от Exception

OrmaJever пишет:
Тоесть проблема в одном лишнем слове new, а если бы его небыло (throw Exceprion) было бы понятне и вопроса не возникло?
ощущение перегруженности, чегот лишнего, отсюда непонятного

чисто псехологически, понять и успокоиться)
 
 Top
OrmaJever Модератор
Отправлено: 09 Августа, 2012 - 19:08:45
Post Id



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


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


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




DlTA пишет:
ощущение перегруженности, чегот лишнего, отсюда непонятного

чисто псехологически, понять и успокоиться)

Я уверен у разработчиков есть своё обьяснение. На это может быть куча причин, возможно что бы не усложнять парсер, он парсит отдельно throw и отдельно создание обьекта по синтаксису, возможно зделали на будещее, что бы можно было расширить этот механизм и сохранить совместимость, например зделают в php6 возможность бросать и функции, и старые коды перестанут работать возможно другая причина. Вот например в с++ есть два способа создания обьекта и этими двумя способами можно бросать исключения.
PHP:
скопировать код в буфер обмена
  1. throw Exception;
  2. // и
  3. throw new Exception;

Возможно и в php что бы небыло ничего нового и непонятного зделано имено так.
Это конечно чисто мои предположения, я некогда не заморачиватся над такой мелочью.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 09 Августа, 2012 - 19:25:23
Post Id



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


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


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




DlTA пишет:
ощущение перегруженности, чегот лишнего, отсюда непонятного

Например:
PHP:
скопировать код в буфер обмена
  1. try {
  2.     DB::instance()->begin();
  3.     /*etwas*/
  4.     DB::instance()->comit();
  5. } catch(Exception $e) {
  6.     DB::instance()->rollback(); //откатимся
  7.     throw $e; //а пользователю ошибку пусть вышестоящий try показывает
  8.     }


PHP:
скопировать код в буфер обмена
  1. $rAPIResponse = json_decode($sRawResponse);
  2. if ($isResponseIncorrect) {
  3.     $e = new APIException('не разобран ответ API');
  4.     $e->setRawResponse($sRawResponse);
  5.     throw $e;
  6.     }


PHP:
скопировать код в буфер обмена
  1. throw ($isFatalError ? new Fatal_exception : new My_Exception);


Как-то так.


-----
PostgreSQL DBA
 
 Top
Stierus Супермодератор
Отправлено: 09 Августа, 2012 - 19:35:58
Post Id



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


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


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




чего-то странную демагогию вы завели %)

В php можно кинуть исключение и это клево Улыбка . Что такое исключение - это ЭКЗЕМПЛЯР класса Exception, что с ним делать - его можно отследить и обработать.

Что бы сделать экземпляр класса - без new (ну или хотя бы clone) не обойтись.

DlTA пишет:
всмыс в том что в данном случае как минимум одно слово в конструкции (в моем понимании) лишнее
throw new Exception


это говорит о том, что вы не понимаете, с чем работаете. new - совсем не обязательная конструкция Улыбка, абсолютно нормальной является практика такого плана:

PHP:
скопировать код в буфер обмена
  1. try{
  2.   try{
  3.     throw new Exception('message', 1);
  4.   }
  5.   catch(Exception $e){
  6.     echo 'first time: ';
  7.     echo $e->getMessage;
  8.     echo "\r\n";
  9.     throw $e;
  10.   }
  11. }
  12. catch(Exception $e){
  13.   echo 'again: ';
  14.   echo $e->getMessage;
  15.   echo "\r\n";
  16. }


throw $e; не содержит new, как вы заметили ...
(Добавление)
Мелкий опередил, в общем-то
 
My status
 Top
OrmaJever Модератор
Отправлено: 09 Августа, 2012 - 21:35:49
Post Id



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


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


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




Мелкий пишет:
Например:
PHP:
скопировать код в буфер обмена
  1. try {
  2.     DB::instance()->begin();
  3.     /*etwas*/
  4.     DB::instance()->comit();
  5. } catch(Exception $e) {
  6.     DB::instance()->rollback(); //откатимся
  7.     throw $e; //а пользователю ошибку пусть вышестоящий try показывает
  8.     }

php 5.3.6
PHP:
скопировать код в буфер обмена
  1. class DB {
  2.         public static $ins;
  3.         public static function instance()
  4.         {
  5.                 if(is_null(self::$ins)) self::$ins = new self;
  6.                 return self::$ins;
  7.         }
  8.         public function comit() { throw new Exception; }
  9. }
  10.  
  11. try {
  12.     DB::instance()->comit();
  13. } catch(Exception $e) {
  14.     throw $e; //а пользователю ошибку пусть вышестоящий try показывает
  15. }

CODE (htmlphp):
скопировать код в буфер обмена
  1. Fatal error: Uncaught exception 'Exception' in X:\www\test.php:216 Stack trace: #0 X:\www\test.php(220): DB->comit() #1 {main} thrown in X:\www\test.php on line 216

Что я делаю не так? Однако Если закоментирова строчку throw $e; то ошибки нет.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DlTA
Отправлено: 09 Августа, 2012 - 21:48:37
Post Id



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


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


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




о как, начинает проясняться
Stierus пишет:
Мелкий опередил, в общем-то
но непонятно.
(Добавление)
OrmaJever пишет:
public function comit() { throw new Exception; }
возможно ошибка тут throw new Exception();
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Операционная система и системные вызовы »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB