Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2011, 20:45   #1
romantik2011
Пользователь
 
Регистрация: 20.07.2011
Сообщений: 70
По умолчанию Исключения в PHP

Написал так:
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");

?>

Я хочу чтоб сработало исключение при пустой передаче первого аргумента конструктору, а исключение не срабатывает, а
выдаёт такой результат:
PHP код:
Имя
Логин
Пароль
и даже значения переданные конструктору не подставляются.

Последний раз редактировалось romantik2011; 25.07.2011 в 21:27.
romantik2011 вне форума Ответить с цитированием
Старый 25.07.2011, 22:01   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Один знак равно (=) в выражении - это присваивание.
Два знака равно (==) в выражении - это нестрогое равенство (сравнение значений).
Три знака равно (===) в выражении - это строгое равенство (сравнение типа данных, и значений).

Вот и посмотрите, какие операции вы выполняете в скобках, и значения каких переменных вы переопределяете из-за этого...
Andkorol вне форума Ответить с цитированием
Старый 26.07.2011, 00:26   #3
romantik2011
Пользователь
 
Регистрация: 20.07.2011
Сообщений: 70
По умолчанию

Всё, спасибо так, сработало.
PHP код:
<?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?
Зачем нужен всё-таки ЗРОУ, если его же задачу может выполнить КЭТЧ?

То есть ЗРОУ даёт возможность отправится в кэтч, а без ЗРОУ, трай...кетч не сможет выдавать исключения?

Последний раз редактировалось romantik2011; 26.07.2011 в 01:10.
romantik2011 вне форума Ответить с цитированием
Старый 26.07.2011, 11:52   #4
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
То есть ЗРОУ даёт возможность отправится в кэтч, а без ЗРОУ, трай...кетч не сможет выдавать исключения?
Грубо говоря , да.
Цитата:
Зачем нужно писать throw, если зроу выдаёт исключения ,а потом всё равно идёт переход от него в catch
и КЭТЧ выбрасывает ещё исключение, зачем это нужно? Почему не достаточно одно блока try...catch?
Вы (или даже кто нибудь до вас) может выбросить одно из нескольких исключений. А в блоках catch вы можете отдельно обработать каждое из них.

Последний раз редактировалось ssdm; 26.07.2011 в 11:56.
ssdm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исключения в Qt iukash Qt и кроссплатформенное программирование С/С++ 6 16.04.2011 18:54
Исключения C++ Impuls1989 Помощь студентам 2 04.03.2011 00:51
Исключения в Visual C++ _Mixer_ Visual C++ 10 19.01.2011 23:12
Исключения yurik1982 Фриланс 9 16.02.2010 00:34
Исключения Rifler Общие вопросы Delphi 5 12.11.2008 00:29