function connect() {
if (!mysql_connect(...)) {
throw new Exception(...);
}
...
}
Исключительные события в php
Суть мною непонятого: как они вообще работают и почему они опираються на проверку условия с помощью оператора IF, они же исключительные события и должны срабатывать при возникновении исключительной ситуации, а не по проверке условия,в этом случае я думаю, что этот код:
Код:
<?php
try
{
if(2/0)
{
echo('');
}
else
{
throw new Excaption('Произошло исключительное событие',7);
}
}
catch(Excaption -> $e)
{
echo($e -> getMessage());
}
?>
try
{
if(2/0)
{
echo('');
}
else
{
throw new Excaption('Произошло исключительное событие',7);
}
}
catch(Excaption -> $e)
{
echo($e -> getMessage());
}
?>
можно заменить вот таким кодом:
Код:
<?php
if(2/0)
{
echo('');
}
else
{
echo('произошла ошибка при делении');
}
?>
if(2/0)
{
echo('');
}
else
{
echo('произошла ошибка при делении');
}
?>
Код:
Дело этой функции - выбросить исключение. А обрабатывать его или пропустить, это уже будет решать вызвавшая сторона.
Можно, конечно, по старинке возвращать false. Но тут главное различие от этого метода - при возвращении false, вызывающая сторона всегда должна проверять результат функции. Если программист решит не заморачиваться с этим, то последствия могут быть печальными. В случае с исключениями - программа будет вылетать с ошибкой и только там, где программист решит явно обработать ошибку, возможны другие варианты.
Разве нельзя данный код написать так:
function connect() {
if (!mysql_connect(...)) {
Обработчик проверки(...);
}
...
}
Разве это будет не тоже самое, что напишем в catch?
Всё равно мы проверяем подключение к БД и это делаеться через оператор IF
Дело библиотеки - подключиться к базе. Если не удалось - кидаем исключение, дальше библиотечному коду париться незачем. А уже тот, кто эту библиотеку использует может обрабатывать это исключение так, как хочет. Может вообще не обрабатывать - тогда сценарий вылетет.
Исключения предоставляют способ взаимодействия разных уровней.
Т.е. есть уровень который может обнаружить ошибку, но не знает как на нее реагировать (это не его компетенция), выше него может располагаться уровень который знает что делать с ошибками, но не может их определить и распознать (если это скажем тот же bool).
Вот тут то и работают исключения, кроме того при большем количестве уровней схема без исключений практически не применима.....
ЗЫ: почитай Страуструпа
всё,что заключено в блок try проверяется и при возникновении события переходит в блок "except()" - catch(PHP), где и генерируется исключительное событие
Цитата: WidowMaker
2Smoki:
Исключения предоставляют способ взаимодействия разных уровней.
Т.е. есть уровень который может обнаружить ошибку, но не знает как на нее реагировать (это не его компетенция), выше него может располагаться уровень который знает что делать с ошибками, но не может их определить и распознать (если это скажем тот же bool).
Вот тут то и работают исключения, кроме того при большем количестве уровней схема без исключений практически не применима.....
ЗЫ: почитай Страуструпа
Исключения предоставляют способ взаимодействия разных уровней.
Т.е. есть уровень который может обнаружить ошибку, но не знает как на нее реагировать (это не его компетенция), выше него может располагаться уровень который знает что делать с ошибками, но не может их определить и распознать (если это скажем тот же bool).
Вот тут то и работают исключения, кроме того при большем количестве уровней схема без исключений практически не применима.....
ЗЫ: почитай Страуструпа
Ну теперь мне стало немного понятнее:rolleyes: ,где я могу найти статью этого Страуструпа?
да хоть на http://natahaus.ru/,
заходишь, регистрируешься и поиск, там аж 6 книг, для начала
"Язык С++" (а так я не говорил, что это на С++? ну да не говорил;))
Там же есть очень удачна книга "Проффесиональное PHP прогр. 2-е издание"
Понаписал немного, типа для начинающих -
Цитата: vasa_c
Понаписал немного, типа для начинающих - http://forum.pyha.ru/topic/103.0
Всё, огромное спасибо за ссылку теперь я понял, как это всё работает:D