Latest web development tutorials
×

PHP курс

PHP курс PHP Краткое введение PHP устанавливать PHP грамматика PHP переменная PHP echo/print PHP Типы данных PHP постоянная PHP строка PHP операторы PHP If...Else PHP Switch PHP массив PHP Сортировка массива PHP Суперглобальные PHP While циркуляция PHP For циркуляция PHP функция PHP Магические Переменные PHP Пространства имен PHP Объектно-ориентированный

PHP форма

PHP форма PHP Аутентификация с помощью форм PHP форма - Обязательные для заполнения поля PHP форма - Проверка электронной почты и URL PHP Полный экземпляр формы PHP $_GET переменная PHP $_POST переменная

PHP Расширенный учебник

PHP Многомерные Массивы PHP дата PHP содержать PHP файл PHP Загрузка файлов PHP Cookie PHP Session PHP E-mail PHP безопасности E-mail PHP Error PHP Exception PHP фильтр PHP Расширенный фильтр PHP JSON

PHP 7 Новые возможности

PHP 7 Новые возможности

PHP база данных

PHP MySQL Краткое введение PHP MySQL подключение PHP MySQL Создание базы данных PHP MySQL Создание таблицы данных PHP MySQL Вставка данных PHP MySQL Вставка нескольких данных PHP MySQL Подготовленные выражения PHP MySQL Считывание данных PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX Краткое введение AJAX PHP AJAX база данных AJAX XML AJAX Поиск в реальном времени AJAX RSS Reader AJAX голосование

PHP справочное руководство

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP обработка изображений PHP RESTful

Обработка исключений PHP

Исключение для изменения ошибка сценария происходит, когда заданный нормальный поток.


Что такое ненормальное

PHP 5 предлагает новый метод для обработки ошибок объектно-ориентированным.

Обработка исключений используется, когда указанная ошибка (исключение) происходит изменение нормального потока сценария. Это состояние называется исключение.

Когда исключение вызывается, как правило, это происходит:

  • Текущее состояние код сохраняется
  • Выполнение кода переключается на заранее определенной (пользовательские) функции обработчика исключений
  • В некоторых случаях, процессор может быть повторно запущен из кода, хранящегося в коде состояния, прекращает выполнение скрипта или продолжать скрипт из другого кодового обозначения

Мы покажем различные методы обработки ошибок:

  • Основное исключение использования
  • Создание обработчика исключений
  • Несколько исключений
  • Rethrows
  • Верхнего уровня набор обработчика исключений

Примечание: Исключения следует использовать только в случае ошибки, она не должна быть использована в заданной точке , чтобы перейти в другое место в коде.


Основное исключение использования

Когда возникает исключение, то последующий код не идет, PHP попытается найти соответствующий "поймать" блок.

Если исключение не перехвачено, но не какой-либо с использованием set_exception_handler () для соответствующего лечения, то серьезная ошибка (неустранимая ошибка) происходит, и сообщения "неперехваченное исключение" (неперехваченного исключения) ошибок на выходе.

Давайте попробуем бросить исключение, но не поймать его:

<?php
// 创建一个有异常处理的函数
function checkNum($number)
{
	if($number>1)
	{
		throw new Exception("Value must be 1 or below");
	}
	return true;
}

// 触发异常
checkNum(2);
?>

Код выше получите ошибку, подобную этой:

Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in /www/w3big/test/test.php:7 Stack trace: #0 /www/w3big/test/test.php(13): checkNum(2) #1 {main} thrown in /www/w3big/test/test.php on line 7

Попробуйте, бросать и ловить

Чтобы избежать ошибок, возникающих в приведенном выше примере, нам нужно создать соответствующий код для обработки исключений.

Правильное обращение код исключения должен включать:

  1. Попробуйте - с помощью нарушение функции должны быть расположены в пределах блока "попробовать". Если исключение не срабатывает, то код будет продолжаться как обычно. Тем не менее, если исключение срабатывает, то будет сгенерировано исключение.
  2. Бросок - в том, как привести в действие положений об исключении. Каждый "бросок" должен соответствовать по крайней мере один "поймать".
  3. Поймать - блок "поймать" перехватывает исключение и создает объект, содержащий сообщение об исключении.

Пусть вызвать исключение:

<?php
// 创建一个有异常处理的函数
function checkNum($number)
{
	if($number>1)
	{
		throw new Exception("变量值必须小于等于 1");
	}
		return true;
}
	
// 在 try 块 触发异常
try
{
	checkNum(2);
	// 如果抛出异常,以下文本不会输出
	echo '如果输出该内容,说明 $number 变量';
}
// 捕获异常
catch(Exception $e)
{
	echo 'Message: ' .$e->getMessage();
}
?>

Приведенный выше код будет получить ошибку вида:

Message: 变量值必须小于等于 1

Примеры объяснить:

Приведенный выше код выдает исключение и ловит его:

  1. Создать функцию checkNum (). Он определяет, является ли число больше единицы. Если да, то генерируется исключение.
  2. Вызов функции checkNum () в блоке "попробовать".
  3. checkNum () функция исключение.
  4. "Поймать" блок получает исключение и создает объект, содержащий информацию об исключении ($ е).
  5. Вызывая $ e- этого исключения объектов> GetMessage (), вывод сообщения об ошибке для исключения.

Однако для того, чтобы следить за "каждый бросок должен соответствовать поймать" принципе, вы можете создать обработчик исключений верхнего уровня для обработки ошибок пропустили.


Создание пользовательского класса исключений

Создание обработчика исключений очень просто. Мы просто создаем специальный класс, когда исключение происходит в PHP, вы можете вызвать его функции. Класс должен быть расширением класса исключений.

Пользовательский класс исключения наследует все атрибуты, определенные в классе PHP исключений, вы можете добавлять пользовательские функции.

Начните с создания классов исключений:

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 错误信息
		$errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
		.': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
		return $errorMsg;
	}
}

$email = "[email protected]";

try
{
	// 检测邮箱
	if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
	{
		// 如果是个不合法的邮箱地址,抛出异常
		throw new customException($email);
	}
}

catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>

Этот новый класс является копией старого класса исключения, плюс функция ErrorMessage (). Потому что это копия старого класса, поэтому он наследует от старых свойств и методов класса, мы можем использовать методы класса исключения, такие как GetLine (), GetFile () и GetMessage ().

Примеры объяснить:

Приведенный выше код генерирует исключение, и через пользовательский класс исключений, чтобы захватить его:

  1. customException () класс как расширение старого класса исключений для создания. Так что он наследует все атрибуты и методы старого класса исключения.
  2. Создать функцию ErrorMessage (). Если адрес электронной почты является недействительным, то функция возвращает сообщение об ошибке.
  3. Переменная $ электронный адрес устанавливается на недопустимые строку адреса электронной почты.
  4. Реализация "попробовать" блок, так как адрес электронной почты не является действительным, и, следовательно, вызывает исключение.
  5. "Поймать" блок, чтобы поймать исключение и выводит сообщение об ошибке.

Несколько исключений

Вы можете использовать несколько исключений в качестве сценария для обнаружения различных ситуаций.

Вы можете использовать несколько блоков if..else, или блок кода коммутатора или гнезда несколько исключений. Эти исключения могут использовать различные классы исключений и возвращать различные сообщения об ошибках:

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 错误信息
		$errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
		.': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
		return $errorMsg;
	}
}

$email = "[email protected]";

try
{
	// 检测邮箱
	if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
	{
		// 如果是个不合法的邮箱地址,抛出异常
		throw new customException($email);
	}
	// 检测 "example" 是否在邮箱地址中
	if(strpos($email, "example") !== FALSE)
	{
		throw new Exception("$email 是 example 邮箱");
	}
}
catch (customException $e)
{
	echo $e->errorMessage();
}
catch(Exception $e)
{
	echo $e->getMessage();
}
?>

Примеры объяснить:

Код выше проверяет два условия, если кто-либо условие не выполнено, то бросить исключение:

  1. customException () класс как расширение старого класса исключений для создания. Так что он наследует все атрибуты и методы старого класса исключения.
  2. Создать функцию ErrorMessage (). Если адрес электронной почты является недействительным, то функция возвращает сообщение об ошибке.
  3. Переменная $ электронный адрес устанавливается на строку, которая является действительным адресом электронной почты, но содержит строку "пример".
  4. Реализация "попробовать" блок кода в первом состоянии, исключение не выбрасывается.
  5. Так как электронная почта содержит строку "пример", второе условие вызывает исключение.
  6. "Поймать" блок перехватывает исключение и отобразит соответствующее сообщение об ошибке.

Если исключение класса customException выбрасывается, но не поймали customException, захватили только базовое исключение, где исключения ручки.


Rethrows

Иногда, когда возникает исключение, вы можете отличаться от стандартного способа справиться с этим. Может быть снова брошен в блоке "поймать".

Сценарий должен быть скрыт от системных ошибок пользователя. Для программистов, системных ошибок может быть важным, но пользователь не заинтересован в них. Для того, чтобы сделать его более удобным для пользователей, чтобы использовать, вы можете бросить исключение снова с относительно удобной для пользователя сообщения:

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 错误信息
		$errorMsg = $this->getMessage().' 不是一个合法的 E-Mail 地址。';
		return $errorMsg;
	}
}

$email = "[email protected]";

try
{
	try
	{
		// 检测 "example" 是否在邮箱地址中
		if(strpos($email, "example") !== FALSE)
		{
			// 如果是个不合法的邮箱地址,抛出异常
			throw new Exception($email);
		}
	}
	catch(Exception $e)
	{
		// 重新抛出异常
		throw new customException($email);
	}
}
catch (customException $e)
{
	// 显示自定义信息
	echo $e->errorMessage();
}
?>

Примеры объяснить:

Приведенный выше код обнаружен в адрес электронной почты, если он содержит строку "пример". Если есть, опять же, возникает исключение:

  1. customException () класс как расширение старого класса исключений для создания. Так что он наследует все атрибуты и методы старого класса исключения.
  2. Создать функцию ErrorMessage (). Если адрес электронной почты является недействительным, то функция возвращает сообщение об ошибке.
  3. Переменная $ электронный адрес устанавливается на строку, которая является действительным адресом электронной почты, но содержит строку "пример".
  4. "Попробуйте" блок содержит еще один "попробовать" блок кода, так что вы можете бросить исключение снова.
  5. Так как электронная почта содержит строку "пример", и, следовательно, вызвать исключение.
  6. "Поймать" блок, чтобы поймать исключение и повторное вбрасывание "customException".
  7. Захваченные "customException", и выводит сообщение об ошибке.

Если исключение не перехвачено в текущем "попробовать" блок, он ищет блок поймать на более высоком уровне.


Верхнего уровня набор обработчика исключений

Функция set_exception_handler () может быть установлен для обработки всех неперехваченное исключение из функций, определяемых пользователем.

<?php
function myException($exception)
{
	echo "<b>Exception:</b> " , $exception->getMessage();
}

set_exception_handler('myException');

throw new Exception('Uncaught Exception occurred');
?>

Выход указанного выше кода выглядит следующим образом:

Exception: Uncaught Exception occurred

В приведенном выше коде, нет "поймать" блок, но обработчик исключений верхнего уровня срабатывает. Эта функция должна использоваться, чтобы захватить все неперехваченное исключение.


правило исключения

  • код обработки исключений должен быть помещен в попытку блока, чтобы поймать потенциальных исключений.
  • Каждый кодовый блок бросить или попытаться должен иметь как минимум один соответствующий блок улова.
  • Вы можете использовать несколько блоков ловить, чтобы поймать различные типы исключений.
  • Может быть в пределах блока кода попытка броска поймать блок (снова брошенный) исключение.

Короче говоря: если вы бросаете исключение, вы должны поймать его.