Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Исключительные события в php

2.1K
14 августа 2007 года
smoki
115 / / 05.11.2006
Здравствуйте уважаемые программисты, недавно прочитал про исключительные события в PHP, после чего ушёл в глубокие зардумья =)
Суть мною непонятого: как они вообще работают и почему они опираються на проверку условия с помощью оператора IF, они же исключительные события и должны срабатывать при возникновении исключительной ситуации, а не по проверке условия,в этом случае я думаю, что этот код:
Код:
<?php
try
{
if(2/0)
 {
   echo('');
 }
else
{
   throw new Excaption('Произошло исключительное событие',7);
 }
}
catch(Excaption -> $e)
{
  echo($e -> getMessage());
}
?>


можно заменить вот таким кодом:
 
Код:
<?php
if(2/0)
{
  echo('');
}
else
{
  echo('произошла ошибка при делении');
}
?>
7.9K
14 августа 2007 года
vasa_c
191 / / 05.04.2007
Они не опираются ни на какие IF. Они генерируются там где надо. Верхние примеры, да, равнозначны. Но, например, вы пишите библиотеку, допустим для работы с БД и там есть метод для соединения:
 
Код:
function connect() {
    if (!mysql_connect(...)) {
        throw new Exception(...);
    }
    ...
}

Дело этой функции - выбросить исключение. А обрабатывать его или пропустить, это уже будет решать вызвавшая сторона.
Можно, конечно, по старинке возвращать false. Но тут главное различие от этого метода - при возвращении false, вызывающая сторона всегда должна проверять результат функции. Если программист решит не заморачиваться с этим, то последствия могут быть печальными. В случае с исключениями - программа будет вылетать с ошибкой и только там, где программист решит явно обработать ошибку, возможны другие варианты.
2.1K
14 августа 2007 года
smoki
115 / / 05.11.2006
Всё равно плохо понял ><

Разве нельзя данный код написать так:
function connect() {
if (!mysql_connect(...)) {
Обработчик проверки(...);
}
...
}
Разве это будет не тоже самое, что напишем в catch?
Всё равно мы проверяем подключение к БД и это делаеться через оператор IF
7.9K
14 августа 2007 года
vasa_c
191 / / 05.04.2007
Что будет в обработчике проверки? Скорее всего die(). А я повторяю - мы пишем библиотеку, которая может использоваться на разных сайтах и по разному. С какой стати метод библиотеки будет убивать весь сценарий?
Дело библиотеки - подключиться к базе. Если не удалось - кидаем исключение, дальше библиотечному коду париться незачем. А уже тот, кто эту библиотеку использует может обрабатывать это исключение так, как хочет. Может вообще не обрабатывать - тогда сценарий вылетет.
2.0K
14 августа 2007 года
WidowMaker
212 / / 05.04.2005
2Smoki:
Исключения предоставляют способ взаимодействия разных уровней.
Т.е. есть уровень который может обнаружить ошибку, но не знает как на нее реагировать (это не его компетенция), выше него может располагаться уровень который знает что делать с ошибками, но не может их определить и распознать (если это скажем тот же bool).
Вот тут то и работают исключения, кроме того при большем количестве уровней схема без исключений практически не применима.....

ЗЫ: почитай Страуструпа
2.1K
14 августа 2007 года
smoki
115 / / 05.11.2006
Ладно, спасибо за ответ, попробую всё-таки сам разобраться, может не понимаю такой тип исключений т.к. сравниваю его с исключениями в DELPHI, там они работают по другому, там не такого слова throw
всё,что заключено в блок try проверяется и при возникновении события переходит в блок "except()" - catch(PHP), где и генерируется исключительное событие
2.1K
14 августа 2007 года
smoki
115 / / 05.11.2006
Цитата: WidowMaker
2Smoki:
Исключения предоставляют способ взаимодействия разных уровней.
Т.е. есть уровень который может обнаружить ошибку, но не знает как на нее реагировать (это не его компетенция), выше него может располагаться уровень который знает что делать с ошибками, но не может их определить и распознать (если это скажем тот же bool).
Вот тут то и работают исключения, кроме того при большем количестве уровней схема без исключений практически не применима.....

ЗЫ: почитай Страуструпа



Ну теперь мне стало немного понятнее:rolleyes: ,где я могу найти статью этого Страуструпа?

2.0K
14 августа 2007 года
WidowMaker
212 / / 05.04.2005
Нууу ты даешь.......:D Страуструпа не знать
да хоть на http://natahaus.ru/,
заходишь, регистрируешься и поиск, там аж 6 книг, для начала
"Язык С++" (а так я не говорил, что это на С++? ну да не говорил;))
Там же есть очень удачна книга "Проффесиональное PHP прогр. 2-е издание"
7.9K
14 августа 2007 года
vasa_c
191 / / 05.04.2007
Понаписал немного, типа для начинающих - http://forum.pyha.ru/topic/103.0
2.1K
14 августа 2007 года
smoki
115 / / 05.11.2006
Цитата: vasa_c
Понаписал немного, типа для начинающих - http://forum.pyha.ru/topic/103.0



Всё, огромное спасибо за ссылку теперь я понял, как это всё работает:D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог