
25.07.2011, 20:42
|
|
Аспирант
|
|
Регистрация: 20.07.2011
Сообщений: 50
|
|
|
Исключения в 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");
?>
Я хочу чтоб сработало исключение при пустой передаче первого аргумента конструктору, а исключение не срабатывает, а
выдаёт такой результат:
Имя:
Логин:
Пароль:
и даже значения переданные конструктору не подставляются.
Последний раз редактировалось romantik2011, 25.07.2011 в 21:26.
|
|

25.07.2011, 21:49
|
|
Профессор
|
|
Регистрация: 29.06.2011
Сообщений: 445
|
|
if($n*!*=*/!*"" or $l="" or $p="")
И это не единственная ошибка, есть еще.
|
|

26.07.2011, 00:24
|
|
Аспирант
|
|
Регистрация: 20.07.2011
Сообщений: 50
|
|
Всё, спасибо так, сработало.
<?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?
Зачем нужен всё-таки ЗРОУ, если его же задачу может выполнить КЭТЧ?
|
|

26.07.2011, 00:33
|
|
Профессор
|
|
Регистрация: 29.06.2011
Сообщений: 445
|
|
Внимательно читаем, что к чему http://php.net/manual/ru/language.exceptions.php. catch исключений не выбрасывает. Вы не очень понимаете, что к чему в механизме работы исключений.
|
|

26.07.2011, 01:09
|
|
Аспирант
|
|
Регистрация: 20.07.2011
Сообщений: 50
|
|
|
То есть ЗРОУ даёт возможность отправится в кэтч, а без ЗРОУ, трай...кетч не сможет выдавать исключения?
|
|

26.07.2011, 11:06
|
 |
:-/
|
|
Регистрация: 28.09.2009
Сообщений: 1,126
|
|
|
исключение может в "трай" появиться
в блоке catch исключение можно выбросить повторно
|
|

26.07.2011, 23:08
|
|
Аспирант
|
|
Регистрация: 20.07.2011
Сообщений: 50
|
|
|
А оператор throw даёт возможность выбросить исключение, но в этом не главная его цель, а его цель сразу перелететь на оператора catch с тем же типом создаваемого объекта класса что и в операторе throw и обработать его в КЭТЧ? То есть смысл оператора ЗРОУ чтоб перелететь сразу в кетч, отдать объекту описанного в кетче исключение и обработать его в кетче?
|
|

26.07.2011, 23:39
|
 |
:-/
|
|
Регистрация: 28.09.2009
Сообщений: 1,126
|
|
Сообщение от romantik2011
|
|
оператор throw даёт возможность выбросить исключение, но в этом не главная его цель
|
в этом его главная и единственная цель, где это исключение дальше ловиться будет уже не так важно
|
|

26.07.2011, 23:49
|
 |
:-/
|
|
Регистрация: 28.09.2009
Сообщений: 1,126
|
|
Сообщение от romantik2011
|
|
А оператор throw даёт возможность выбросить исключение, но в этом не главная его цель, а его цель сразу перелететь на оператора catch с тем же типом создаваемого объекта класса что и в операторе throw и обработать его в КЭТЧ? То есть смысл оператора ЗРОУ чтоб перелететь сразу в кетч, отдать объекту описанного в кетче исключение и обработать его в кетче?
|
ну, приблизительно да, если есть оператор throw, естесственно будет искаться блок catch, т.к. этот оператор выбрасывает исключение, и его надо обработать. Не помню , как в php (подозреваю, что так же), но в java(я имею ввиду java, а не js) выброшенное исключение определенного класса будет обработано блоком catch, ловящим исключение либо того же класса, либо суперкласса
Последний раз редактировалось Shaci, 26.07.2011 в 23:53.
|
|
|
|