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
Форумы портала PHP.SU :: Версия для печати :: throw new Exception
Форумы портала PHP.SU » » Операционная система и системные вызовы » throw new Exception

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

1. DlTA - 08 Августа, 2012 - 13:43:33 - перейти к сообщению
порядок выбрасывания исключения
throw new Exception([$text]);
стандартная запись которая используется в нескольких языках (в с# так же кажись)

раньше оно мне просто не нравилось, а щас созрел для вопроса, а что еще можно бросать кроме исключений? если ничего то зачем тогда вообще это бросание.?
2. EuGen - 08 Августа, 2012 - 14:07:58 - перейти к сообщению
Не понял сути вопроса. То есть Вам не нравится эта стандартная языковая конструкция? Если так, то, думаю, более уместно будет написать Расмусу Ледорфу.
3. DlTA - 08 Августа, 2012 - 14:24:11 - перейти к сообщению
вопрос в другом, что еще можно выбрасывать кроме исключений.
4. Stierus - 08 Августа, 2012 - 14:24:36 - перейти к сообщению
от исключений можно наследоваться ...
5. DlTA - 08 Августа, 2012 - 14:28:59 - перейти к сообщению
вопрос не в том что написано в доках, их я полистал,
например фраза throw new Exception([$text]); (о наследовании от основного класса ислючений вкурсе)
понимается так:
выбросить объект класса исключение

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

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

сорри за оффтопик Улыбка)
7. EuGen - 08 Августа, 2012 - 15:51:05 - перейти к сообщению
Все, что предполагается к использованию в throw должно быть наследовано от базового класса Exception. Ничего иного "выбросить" не получится. (а если бы и получилось - в чем смысл?)
8. DlTA - 09 Августа, 2012 - 17:55:34 - перейти к сообщению
EuGen пишет:
Все, что предполагается к использованию в throw должно быть наследовано от базового класса Exception. Ничего иного "выбросить" не получится. (а если бы и получилось - в чем смысл?)

всмыс в том что в данном случае как минимум одно слово в конструкции (в моем понимании) лишнее
throw new Exception
ну вот если нельзя больше нигде это использовать то для чего это было расчитано, может таки что еще по расчетом должно было кидаться?
9. OrmaJever - 09 Августа, 2012 - 18:10:07 - перейти к сообщению
Бросать моджно только обьекты, если бросить например функцию
то будет ошибдка
CODE (htmlphp):
скопировать код в буфер обмена
  1. Fatal error: Can only throw objects in ...

Тоесть проблема в одном лишнем слове new, а если бы его небыло (throw Exceprion) было бы понятне и вопроса не возникло? Оно просто обозначает создание обьекта и всё.
10. DlTA - 09 Августа, 2012 - 18:59:23 - перейти к сообщению
OrmaJever пишет:
Бросать моджно только обьекты, если бросить например функцию



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

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

чисто псехологически, понять и успокоиться)
11. OrmaJever - 09 Августа, 2012 - 19:08:45 - перейти к сообщению
DlTA пишет:
ощущение перегруженности, чегот лишнего, отсюда непонятного

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

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

Возможно и в php что бы небыло ничего нового и непонятного зделано имено так.
Это конечно чисто мои предположения, я некогда не заморачиватся над такой мелочью.
12. Мелкий - 09 Августа, 2012 - 19:25:23 - перейти к сообщению
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);


Как-то так.
13. Stierus - 09 Августа, 2012 - 19:35:58 - перейти к сообщению
чего-то странную демагогию вы завели %)

В 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, как вы заметили ...
(Добавление)
Мелкий опередил, в общем-то
14. OrmaJever - 09 Августа, 2012 - 21:35:49 - перейти к сообщению
Мелкий пишет:
Например:
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; то ошибки нет.
15. DlTA - 09 Августа, 2012 - 21:48:37 - перейти к сообщению
о как, начинает проясняться
Stierus пишет:
Мелкий опередил, в общем-то
но непонятно.
(Добавление)
OrmaJever пишет:
public function comit() { throw new Exception; }
возможно ошибка тут throw new Exception();

 

Powered by ExBB FM 1.0 RC1