3.5. Операторы exit, die и return
Подобно оператору break, оператор exit обеспечивает возможность прервать выполнение программы, но, в отличие от оператора break, он завершает выполнение программы вообще. При этом в браузер не отсылается никакого диагностического текста. Такой прием полезен в случае возникновения ошибки, когда продолжение выполнения программы грозит гораздо более серьезными последствиями. Это довольно традиционный метод программирования при работе с запросами к базам данных. В этом случае, если оператор SQL не проходит простой синтаксической проверки, нет никакого смысла продолжать его выполнение.
Оператор die аналогичен оператору exit за исключением того, что он снабжается выражением, которое отсылается в браузер перед аварийным завершением работы сценария. Пользуясь тем, что подвыражения обрабатываются в соответствии с приоритетностью и ассоциативностью, и учитывая природу логических операторов, выражение из листинга 3.12 будет допустимо.
| Листинг 3.12. Идиома использования оператора die_
$fp = fopen("somefile.txt", "r") OR die("Нeвозможно открыть файл");
Приоритет оператора OR в листинге 3.12 имеет существенное значение, т.е. его приоритет меньше приоритета оператора присвоения, что позволяет PHP присвоить значение, возвращаемое функцией fopen, переменной fp, а затем обработать выражение OR. Оператор ||, функционально тождественный оператору OR, имеет более высокий приоритет, чем оператор присвоения. В случае применения оператора || в такой ситуации PHP обработает его первым и завершит работу сценария.
В главе 4, "Функции", обсуждается традиционное использование оператора return, но в PHP существует и вариант нетрадиционного использования данного оператора.
Это происходит при использовании оператора include, описанного в главе 7, "Операции ввода-вывода и доступ к диску". Если его вызов производится вне функции, оператор return останавливает выполнение текущего сценария и возвращает управление сценарию, который вызвал include, т.е. когда в сценарии используется функция include, вложенный сценарий может завершаться преждевременно. При использовании команды return в сценарии, который не был вызван с помощью оператора include, сценарий просто завершит свое выполнение, как это бывает при выполнении оператора exit.
Конечно, можно согласиться с тем, что это довольно странная концепция, но и такой оператор вполне заслуживает своего собственного имени. Но, с другой стороны, в особых случаях он позволяет создавать довольно приличный код.
3.6. Исключительные события
При возникновении ошибки PHP отсылает сообщение об ошибке в браузер. Некоторые ошибки прерывают выполнение сценария. Для обработки ошибок, которые не останавливают выполнение сценариев, их необходимо задавать с помощью функции, указанной с помощью функции set_error_handler. Эта функция подробно описывается в главе 15, "Настройка". Кроме того, можно воспользоваться возможностями функции trigger_error (о ней речь пойдет в главе 9, "Операционная система"), которая позволяет генерировать новые ошибки.
С другой стороны, для решения возникающих проблем можно использовать исключительные события (рис. 3.7). Исключительные события представляют собой объектно-ориентированные ошибочные условия и возникают в контексте оператора try. Для инициирования исключительного события используется оператор throw, затем управление передается блоку catch, который получает копию возникшего исключительного события. Для каждого исключительного события, которое будет перехватываться, необходимо добавить свой собственный блок catch или воспользоваться встроенным классом Exception PHP. Встроенный класс Exception включает два метода: getFile, возвращающий путь к файлу, генерировавшему исключительное событие, и getLine, возвращающий номер строки из этого файла.
При работе с объектно-ориентированными языками (например, Java) концепция исключительного события аналогична. Если же вы предпочитаете процедурный тип программирования, такой подход работать не будет. В листинге 3.13 продемонстрировано использование исключительных событий. Объекты детально обсуждаются в главе 6, "Классы и объекты". Если у вас нет никакого опыта работы с объектами, вернитесь к данному материалу после подробного изучения главы 6, "Классы и объекты".
j Листинг 3.13. Использование оператора try_
<?php
// Вывести математическое выражение из основного класса class mathException extends Exception
{
public $type;
public function __construct($type)
{
// Принять имя файла и номер строки
parent::Exception();
$this->type = $type;
}
}
// Попробовать операцию деления $numerator = 1; $denominator = 0; try
{
// Запустить исключительное событие "деление на нуль" if($denominator == 0)
{
throw new mathException("Division by zero");
}
print($numerator/$denominator);
}
catch(mathException $e)
{
// Мы перехватили математическое исключительное событие print(" Перехват математического исключительного события ($e->type) in " .
"$e->file on line $e->line<br>n");
}
catch(Exception $e)
{
// Мы перехватили исключительное событие другого типа print("Пepeхват исключительного события в " . $e->file() . " on line " . $e->line() . "<br>n");
}
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Операторы управления. Часть Шестая.
28-12-2009
<< Предыдущая статья | Следующая статья >> |
PHP. Операторы управления. Часть Пятая. | PHP. Операторы управления. Часть Седьмая. |