// если включен подробный вывод сообщения об ошибке myLog("Failed to open nosuchfile.txt"); echo($php_errormsg);
//корректирующее действие - использовать альтернативную строку текста $text = $default_text; } else {
//сообщения об ошибках отключены myLog("Failed to open nosuchfile.txt"); $text = $default_text;
}
echo("lext read: . $text);
//Упрощенный вариант функции регистрации сообщений об ошибках
function mvLog($msg) {
echo("<h2>" . $msg . "</h2>");
}
Приведенный сценарий пытается открыть файл и прочесть из него строку текста. Если оказывается, что сделать это невозможно, то используется альтернативная строка текста. Флаг $verbose определяет, подробным или кратким должно быть сообщение об ошибке. С помощью оператора @ можно подавить сообщение об ошибке, если она возникнет, а затем вывести сообщение, основываясь назначении переменной $verbose.
В случае сокращенного вывода ошибка просто регистрируется, и выполняются корректирующие действия, которые в данном случае состоят в присваивании переменной $text альтернативного текстового значения. В случае подробного вывода ошибка записывается в журнал, а также выводится системное сообщение об ошибке, после чего выполняется корректирующее действие.
Восстановление после ошибок
Проверка значения, возвращенного функцией, и обнаружение сбойной ситуации дают возможность вывести более дружественное сообщение об ошибке и прервать выполнение сценария или предпринять корректирующие действия. Эти действия могут состоять всего лишь в выполнении некоторых специфических для приложения служебных задач с последующим мягким завершением сценария либо быть достаточно сложным и переходить к другому источнику данных или алгоритму.
<?php
//Error_Rec. php
class Connection_Manager <
var $connections;
//Эта функция открывает соединение и добавляет его //к списку открытых соединений
function openConnection($host, $user, $pass) {
//попытка соединения с базой данных mysql $mysql_link = @mysql_conneet($host, $user, $pass); /'/поместить идентификатор соединения в массив connections if (FALSE !== $mysql_link) {
$this->connections[] = $mysql_link;
}
return
}
//Эту функцию следует вызвать, когда все соединения должны быть закрыты
function {
foreach <$this->connections as $id) ЗЯ @mysql_close($id);
>
}
}
//Создание экземпляра класса SmyConnxnMgr = new Connection_Manager();
//Для создания новых соединений используется класс Connection_Manager $connxn1 = $myConnxnMgr->openConnection("mysqldb.wrox.com", "dbuser", "dbpassword");