Исключения в PHP
Написал так:
<?php class A{ function __construct($n,$l,$p){ try{ if($n="" or $l="" or $p="") throw new Exception("Ошибка, один из аргументов не передан конструктору!"); echo "Имя: ",$n; echo "<br>Логин: ",$l; echo "<br>Пароль: ",$p; }catch(Exception $e){ echo $e->getMesage(); } } } $obj = new A("","clown","111"); ?> Я хочу чтоб сработало исключение при пустой передаче первого аргумента конструктору, а исключение не срабатывает, а выдаёт такой результат: Имя: Логин: Пароль: и даже значения переданные конструктору не подставляются. |
if($n*!*=*/!*"" or $l="" or $p="") И это не единственная ошибка, есть еще. |
Всё, спасибо так, сработало.
<?php class nameExc extends Exception{ function __construct($msg){ $msg .=" name!"; parent::__construct($msg); } } class loginExc extends Exception{ function __construct($msg){ $msg .=" login!"; parent::__construct($msg); } } class passExc extends Exception{ function __construct($msg){ $msg .=" password!"; parent::__construct($msg); } } class A{ function __construct($n,$l,$p){ try{ if($n=="") throw new nameExc("Введите"); if($l=="") throw new loginExc("Введите"); if($p=="") throw new passExc("Введите"); }catch(nameExc $e){ echo $e->getMessage(); } catch(loginExc $e){ echo $e->getMessage(); } catch(passExc $e){ echo $e->getMessage(); } } } $obj = new A("","clown","111"); ?> Меня интересует один вопрос. Зачем нужно писать throw, если зроу выдаёт исключения ,а потом всё равно идёт переход от него в catch и КЭТЧ выбрасывает ещё исключение, зачем это нужно? Почему не достаточно одно блока try...catch? Зачем нужен всё-таки ЗРОУ, если его же задачу может выполнить КЭТЧ? |
Внимательно читаем, что к чему http://php.net/manual/ru/language.exceptions.php. catch исключений не выбрасывает. Вы не очень понимаете, что к чему в механизме работы исключений.
|
То есть ЗРОУ даёт возможность отправится в кэтч, а без ЗРОУ, трай...кетч не сможет выдавать исключения?
|
исключение может в "трай" появиться
в блоке catch исключение можно выбросить повторно |
А оператор throw даёт возможность выбросить исключение, но в этом не главная его цель, а его цель сразу перелететь на оператора catch с тем же типом создаваемого объекта класса что и в операторе throw и обработать его в КЭТЧ? То есть смысл оператора ЗРОУ чтоб перелететь сразу в кетч, отдать объекту описанного в кетче исключение и обработать его в кетче?
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 17:26. |