Исключения в 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, время: 02:38. |