Php throw exception in function

PHP: ‘or’ statement on instruction fail: how to throw a new exception?

However, i cant understand how exactly that ‘or’ statement works. I would like to throw a new exception instead of die(), but:

function ThrowMe($mess, $code) < throw new Exception($mess, $code); >try< $foo = bar() or ThrowMe('We have a problem in here', 666); >catch(Exception $e)< echo $e->getMessage(); > 

But there is a way to throw a new exception directly after the ‘or’ statement? Or this kind of structure is mandatory (i dont liek the ThrowMe function at all):

try < $foo = bar(); if(!$foo)< throw new Exception('We have a problem in here'); >>catch(Exception $e)< echo $e->getMessage(); > 

Edit: what i want is really to avoid the use of an if() check every potential dangerous operation i do, for example:

#The echo $e->getMessage(); is just an example, in real life this have no sense! try < $foo = bar(); if(!$foo)< throw new Exception('Problems with bar()'); >$aa = bb($foo); if(!$aa) < throw new Exception('Problems with bb()'); >//. and so on! >catch(Exception $e)< echo $e->getMessage(); > #But i relly prefer to use something like: try< $foo = bar() or throw new Exception('Problems with bar()'); $aa = bb($foo) or throw new Exception('Problems with bb()'); //. and so on! >catch(Exception $e)< echo $e->getMessage(); > #Actually, the only way i figured out is: try< $foo = bar() or throw new ThrowMe('Problems with bar()', 1); $aa = bb($foo) or throw new ThrowMe('Problems with bb()', 2); //. and so on! >catch(Exception $e)< echo $e->getMessage(); > #But i'll love to thro the exception directly instead of trick it with ThrowMe function. 

Источник

Читайте также:  Link rel css code

Исключения

Модель исключений (exceptions) в PHP 5 схожа с используемыми в других языках программирования. Исключение можно сгенерировать (как говорят, «выбросить») при помощи оператора throw, и можно перехватить (или, как говорят, «поймать») оператором catch. Код генерирующий исключение, должен быть окружен блоком try, для того чтобы можно было перехватить исключение. Каждый блок try должен иметь как минимум один соответствующий ему блок catch или finally.

Генерируемый объект должен принадлежать классу Exception или наследоваться от Exception. Попытка сгенерировать исключение другого класса приведет к неисправимой ошибке.

catch

Можно использовать несколько блоков catch, перехватывающих различные классы исключений. Нормальное выполнение (когда не генерируются исключения в блоках try или когда класс сгенерированного исключения не совпадает с классами, объявленными в соответствующих блоках catch) будет продолжено за последним блоком catch. Исключения так же могут быть сгенерированы (или вызваны еще раз) оператором throw внутри блока catch.

При генерации исключения код следующий после описываемого выражения исполнен не будет, а PHP предпримет попытку найти первый блок catch, перехватывающий исключение данного класса. Если исключение не будет перехвачено, PHP выдаст сообщение об ошибке: «Uncaught Exception . » (Неперехваченное исключение), если не был определен обработчик ошибок при помощи функции set_exception_handler() .

finally

В PHP 5.5 и более поздних версиях также можно использовать блок finally после или вместо блока catch. Код в блоке finally всегда будет выполняться после кода в блоках try и catch, вне зависимости было ли брошено исключение или нет, перед тем как продолжится нормальное выполнение кода. whether an exception has been thrown, and before normal execution resumes.

Примечания

Замечание:

Внутренние функции PHP в основном используют сообщения об ошибках, и только новые объектно-ориентированные расширения используют исключения. Однако, ошибки можно легко преобразовать в исключения с помощью класса ErrorException.

Примеры

Пример #3 Выброс исключений

function inverse ( $x ) if (! $x ) throw new Exception ( ‘Деление на ноль.’ );
>
return 1 / $x ;
>

try echo inverse ( 5 ) . «\n» ;
echo inverse ( 0 ) . «\n» ;
> catch ( Exception $e ) echo ‘Выброшено исключение: ‘ , $e -> getMessage (), «\n» ;
>

// Продолжение выполнения
echo «Hello World\n» ;
?>

Результат выполнения данного примера:

0.2 Выброшено исключение: Деление на ноль. Hello World

Пример #4 Вложенные исключения

function inverse ( $x ) if (! $x ) throw new Exception ( ‘Деление на ноль.’ );
>
return 1 / $x ;
>

try echo inverse ( 5 ) . «\n» ;
> catch ( Exception $e ) echo ‘Поймано исключение: ‘ , $e -> getMessage (), «\n» ;
> finally echo «Первое finally.\n» ;
>

try echo inverse ( 0 ) . «\n» ;
> catch ( Exception $e ) echo ‘Поймано исключение: ‘ , $e -> getMessage (), «\n» ;
> finally echo «Второе finally.\n» ;
>

// Продолжение нормального выполнения
echo «Hello World\n» ;
?>

Результат выполнения данного примера:

0.2 Первое finally. Поймано исключение: Деление на ноль. Второе finally. Hello World

Пример #5 Вложенные исключения

class MyException extends Exception

class Test public function testing () try try throw new MyException ( ‘foo!’ );
> catch ( MyException $e ) // повторный выброс исключения
throw $e ;
>
> catch ( Exception $e ) var_dump ( $e -> getMessage ());
>
>
>

$foo = new Test ;
$foo -> testing ();

Результат выполнения данного примера:

Источник

Оцените статью