ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Операторы управления. Часть Шестая.


28-12-2009

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");
}

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Операторы управления. Часть Пятая. PHP. Операторы управления. Часть Седьмая.