Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
romantik
0 / 0 / 0
Регистрация: 19.07.2011
Сообщений: 66
#1

Исключения в PHP - PHP

25.07.2011, 21:26. Просмотров 1786. Ответов 11
Метки нет (Все метки)

Написал так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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
1
2
3
Имя: 
Логин: 
Пароль:
и даже значения переданные конструктору не подставляются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2011, 21:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исключения в PHP (PHP):

Php!? Strip_tags, как добавить исключения, у меня смайлики вот так <1> - он их глотает? - PHP
у меня смайлики как теги в чате вот такого вида: &lt;1&gt; &lt;2&gt; &lt;..&gt; &lt;10&gt;, я исп. strip_tags фильтр тегов, но он же и смайлики фильтрует, как...

Продолжение работы после исключения - PHP
Комрады, объясните такую вещьч - есть скрипт, который запускается раз в сутки, смотрит в БД пути к файлам, идет туда, читает их, если...

Когда лучше применять исключения? - PHP
В каком случае лучше использовать старые добрые die, exit, а в каком исключения? mysql_connect() or die()... // Или try{ ...

Исключения для стилей и скриптов htaccess - PHP
Здравствуйте! Помогите пожалуйста разобраться в ситуации. Содержимое файла htaccess: RewriteEngine on RewriteBase / ...

Можно ли так писать исключения на проверку обрыва связи? - PHP
try{ $json = $c_helper-&gt;getData($url); } catch(Exception $e) { sleep(1000); $json = $c_helper-&gt;getData($url); }

Вставить php-условие в html-код, который находится в php-коде - PHP
Выводится список из базы данных foreach($callbacklist as $call) { $ListCall.='&lt;tr&gt; &lt;td&gt;'.$call-&gt;datform.'&lt;/td&gt; ...

11
lutick
5 / 5 / 0
Регистрация: 05.11.2009
Сообщений: 27
25.07.2011, 21:49 #2
кагбэ наверное не
PHP
1
if($n="" or $l="" or $p="")
а наверное
PHP
1
 if($n=="" or $l=="" or $p=="")
1
romantik
0 / 0 / 0
Регистрация: 19.07.2011
Сообщений: 66
26.07.2011, 00:25  [ТС] #3
Всё, спасибо так, сработало.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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?
Зачем нужен всё-таки ЗРОУ, если его же задачу может выполнить КЭТЧ?
0
lutick
5 / 5 / 0
Регистрация: 05.11.2009
Сообщений: 27
26.07.2011, 01:04 #4
может хабр вам поможет)
http://habrahabr.ru/blogs/php/21376/
0
romantik
0 / 0 / 0
Регистрация: 19.07.2011
Сообщений: 66
26.07.2011, 01:10  [ТС] #5
То есть ЗРОУ даёт возможность отправится в кэтч, а без ЗРОУ, трай...кетч не сможет выдавать исключения?
0
lutick
5 / 5 / 0
Регистрация: 05.11.2009
Сообщений: 27
26.07.2011, 01:20 #6
ну вот это я нашол на офф сайте пхп в мануале

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

При генерации исключения, код следующий ниже оператора throw исполнен не будет, а PHP предпримет попытку найти первый блок catch, перехватывающий исключение данного класса. Если исключение не будет перехвачено, PHP выдаст сообщение об ошибке: "Uncaught Exception ..." (Неперехваченное исключение), если конечно не был определен обработчик ошибок при помощи функции set_exception_handler().
1
romantik
0 / 0 / 0
Регистрация: 19.07.2011
Сообщений: 66
26.07.2011, 01:48  [ТС] #7
Ну всё же ответьте на мой последний вопрос
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.07.2011, 04:22 #8
romantik, вы забываете об уровне абстакции, например у вас есть 10 функий и каждая по цепочке вызывает следующую, при этом вызов происходит в блоке try {}, допустим в одной из функций происходит исключение, возникает вопрос как вернуться в место вызова 1-й функции цепи? Для этот в обработчике сatch {} делают еще один выброс исключения.
0
romantik
0 / 0 / 0
Регистрация: 19.07.2011
Сообщений: 66
26.07.2011, 23:07  [ТС] #9
А оператор throw даёт возможность выбросить исключение, но в этом не главная его цель, а его цель сразу перелететь на оператора catch с тем же типом создаваемого объекта класса что и в операторе throw и обработать его в КЭТЧ? То есть смысл оператора ЗРОУ чтоб перелететь сразу в кетч, отдать объекту описанного в кетче исключение и обработать его в кетче?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.07.2011, 23:13 #10
Цитата Сообщение от romantik Посмотреть сообщение
А оператор throw даёт возможность выбросить исключение, но в этом не главная его цель, а его цель сразу перелететь на оператора catch с тем же типом создаваемого объекта класса что и в операторе throw и обработать его в КЭТЧ? То есть смысл оператора ЗРОУ чтоб перелететь сразу в кетч, отдать объекту описанного в кетче исключение и обработать его в кетче?
именно так
1
romantik
0 / 0 / 0
Регистрация: 19.07.2011
Сообщений: 66
26.07.2011, 23:13  [ТС] #11
Хорошо, а когда тогда не используют зроу, а используют чисто try...catch без ЗРОУ?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.07.2011, 23:27 #12
например
Код
try
{
    $a = func(); //вызов функции func, внутри этой функции мы можем бросить исключение оператором throw
}
catch(Exception $e)
{
    echo $e->getMesage();
}
0
26.07.2011, 23:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2011, 23:27
Привет! Вот еще темы с ответами:

Php+javascript В зависимости от клика вывести переменную php в новое окно - PHP
Есть код. В коде две ссылки. При нажатии на первую ссылку должно открыться окно (можно вкладка) и в него надо вписать что-нибудь одно. Если...

Ошибка PHP Startup: Unable to load dynamic library в RAPID PHP - PHP
Здравствуйте! у меня при работе с пхп редактором возникает ошибка. Не находит библиотеки. Причем выдает не правильный путь вместо...

не вызывается PHP обработчик для формы, которая тоже в PHP файле - PHP
На страничке PHP есть кнопка &lt;form ...&gt;&lt;input type=&quot;button&quot; ..&gt; &lt;/form&gt; при нажатии на которую должен вызываться обработчик, т. е. другой...

Как, использующие php, сайты имеют расширение страниц html, но не php? - PHP
Сабж. Собственно говоря, сайты наверняка построены с использованием PHP, но при этом страница может иметь расширение html. Либо страница...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru