Latest web development tutorials
×

PHP curso

PHP curso PHP breve introducción PHP instalar PHP gramática PHP variable PHP echo/print PHP Tipos de datos PHP constante PHP cadena PHP operadores PHP If...Else PHP Switch PHP formación PHP Ordenación de un conjunto PHP superglobals PHP While circulación PHP For circulación PHP función PHP Las variables mágicas PHP Los espacios de nombres PHP Orientado a Objetos

PHP formulario

PHP formulario PHP autenticación de formularios PHP formulario - Los campos necesarios PHP formulario - correo electrónico de verificación y la URL PHP instancia completa formulario PHP $_GET variable PHP $_POST variable

PHP Tutorial avanzado

PHP Las matrices multidimensionales PHP fecha PHP contener PHP expediente PHP Cargar archivo PHP Cookie PHP Session PHP E-mail PHP seguridad E-mail PHP Error PHP Exception PHP filtro PHP filtro avanzado PHP JSON

PHP 7 nuevas características

PHP 7 nuevas características

PHP base de datos

PHP MySQL breve introducción PHP MySQL conexión PHP MySQL La creación de una base de datos PHP MySQL Crear una tabla de datos PHP MySQL insertar datos PHP MySQL Insertar datos múltiples PHP MySQL Sentencias preparadas PHP MySQL leer datos 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 breve introducción AJAX PHP AJAX base de datos AJAX XML AJAX búsqueda en tiempo real AJAX RSS Reader AJAX voto

PHP Manual de referencia

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 Procesamiento de imágenes PHP RESTful

manejo de excepciones PHP

Excepción para el cambio de la secuencia de comandos de error se produce cuando el flujo normal especificado.


Lo que es anormal

PHP 5 ofrece un nuevo método para la manipulación orientada a objetos de error.

El manejo de excepciones se utiliza cuando se produce el error especificado (excepción) para cambiar el flujo normal de la secuencia de comandos. Esta condición se llama una excepción.

Cuando se dispara una excepción, por lo general se produce:

  • Estado actual código se guarda
  • la ejecución de código se conecta a un (a medida) la función de gestión de excepciones predefinido
  • En algunos casos, el procesador puede volver a iniciarse desde el código almacenado en el código de estado, terminar la ejecución del script o continuar la secuencia de comandos de un código de ubicación diferente

Vamos a mostrar los diferentes métodos de tratamiento de errores:

  • excepción de uso básico
  • Creación de un manejador de excepción personalizada
  • múltiples excepciones
  • relanzamientos
  • De alto nivel conjunto de gestión de excepciones

Nota: Las excepciones deben usar sólo en caso de error, no se debe utilizar en un punto especificado para saltar a otra ubicación en el código.


excepción de uso básico

Cuando se produce una excepción, el código subsiguiente no se detiene, PHP intentará encontrar el bloque de adaptación "captura".

Si una excepción no se detecta, pero ya no con el uso de set_exception_handler () para el tratamiento correspondiente, a continuación, un grave error (Error fatal) se produce, y los mensajes de la salida (excepción no detectada) de error "Excepción no detectada".

Vamos a tratar de lanzar una excepción, pero no lo captura:

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

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

El código anterior se obtendrá un error similar al siguiente:

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

Intenta, lanzar y atrapar

Para evitar los errores que aparecen en el ejemplo anterior, tenemos que crear el código apropiado para manejar excepciones.

código de excepción manejo adecuado debe incluir:

  1. Trate - con ayuda de la función anormal debe estar ubicado dentro del bloque "tratar". Si se activa no es una excepción, el código seguirá como de costumbre. Sin embargo, si se desencadena una excepción, se producirá una excepción.
  2. El tiro - en la forma de desencadenar las disposiciones de excepción. Cada "tirar" debe corresponder al menos a una "captura".
  3. Catch - bloque "atrapar" captura la excepción y crea un objeto que contiene el mensaje de excepción.

Deje que desencadenan una excepción:

<?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();
}
?>

El código anterior obtendrá un error como este:

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

Ejemplos explican:

El código anterior produce una excepción y lo atrapa:

  1. Crear función checkNum (). Se detecta si un número es mayor que uno. Si lo es, se produce una excepción.
  2. Llame a la función checkNum () en un bloque de "tratar".
  3. checkNum () la función excepción es lanzada.
  4. "Captura" bloque recibe la excepción y crea un objeto que contiene información sobre la excepción ($ e).
  5. Llamando a $ electrónico a esta excepción objetos> getMessage (), la salida del mensaje de error de excepción.

Sin embargo, con el fin de seguir el "cada tiro debe corresponder a una captura" principio, se puede configurar un controlador de excepciones de nivel superior para manejar los errores perdidas.


Crear una clase de excepción personalizada

Creación de un manejador de excepción personalizada es muy simple. Sólo tendrá que crear una clase especial, cuando se produce una excepción en PHP, puede llamar a sus funciones. La clase debe ser una extensión de la clase de excepción.

La clase de excepción personalizada hereda todos los atributos definidos en la clase de excepción PHP, es posible que desee añadir funciones personalizadas.

Comience por crear clases de excepción:

<?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();
}
?>

Esta nueva clase es una copia de la clase de excepción de edad, además de la función errorMessage (). Debido a que es una copia de la clase de edad, por lo que se hereda de las antiguas propiedades y métodos de la clase, podemos usar los métodos de la clase de excepción, como getLine (), getFile () y getMessage ().

Ejemplos explican:

El código anterior produce una excepción, ya través de una clase de excepción personalizada para capturarlo:

  1. customException () de clase como una extensión de la clase de excepción de edad para crear. Así que hereda todos los atributos y métodos de la clase de excepción de edad.
  2. Crear función errorMessage (). Si la dirección de correo electrónico no es válida, la función devuelve un mensaje de error.
  3. La variable $ correo electrónico se establece en cadena de dirección de correo electrónico válida.
  4. No es válida la aplicación del bloque de "tratar", ya que la dirección de correo electrónico, y por lo tanto se produce una excepción.
  5. "Captura" bloque para detectar la excepción y muestra un mensaje de error.

múltiples excepciones

Puede utilizar varias excepciones como una secuencia de comandos para detectar una variedad de situaciones.

Puede usar múltiples bloques if..else, o un bloque de interruptor del código, o anidar varias excepciones. Estas excepciones pueden utilizar diferentes clases de excepción y devolver diferentes mensajes de error:

<?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();
}
?>

Ejemplos explican:

El código anterior comprueba dos condiciones, si cualquier condición no se cumple, entonces una excepción:

  1. customException () de clase como una extensión de la clase de excepción de edad para crear. Así que hereda todos los atributos y métodos de la clase de excepción de edad.
  2. Crear función errorMessage (). Si la dirección de correo electrónico no es válida, la función devuelve un mensaje de error.
  3. La variable $ correo electrónico se establece en una cadena que es una dirección válida de correo electrónico, sino que contiene la cadena "ejemplo".
  4. La implementación de bloque "tratar" de código en la primera condición, se produce una excepción.
  5. Dado que el correo electrónico contiene el "ejemplo" cadena, la segunda condición desencadena una excepción.
  6. "Captura" bloque detecta la excepción y mostrar el mensaje de error apropiado.

Si se lanza una excepción de clase customException pero no captó customException, capturado solamente una excepción de base, donde las excepciones del mango.


relanzamientos

A veces, cuando se produce una excepción, es posible que desee diferir de la forma estándar para manejarlo. Podrá volver a ser lanzado en un bloque de "captura".

La secuencia de comandos debe estar oculto de los errores en el sistema del usuario. Para los programadores, los errores del sistema pueden ser importantes, pero el usuario no está interesado en ellos. Para que sea más fácil para los usuarios a utilizar, puede lanzar una excepción con el mensaje de nuevo relativamente fácil de usar:

<?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();
}
?>

Ejemplos explican:

El código anterior se detecta en la dirección de correo electrónico si contiene la cadena "ejemplo". Si la hay, de nuevo, se produce una excepción:

  1. customException () de clase como una extensión de la clase de excepción de edad para crear. Así que hereda todos los atributos y métodos de la clase de excepción de edad.
  2. Crear función errorMessage (). Si la dirección de correo electrónico no es válida, la función devuelve un mensaje de error.
  3. La variable $ correo electrónico se establece en una cadena que es una dirección válida de correo electrónico, sino que contiene la cadena "ejemplo".
  4. "Prueba" bloque contiene otro bloque "tratar" de código, por lo que puede producir una excepción de nuevo.
  5. Dado que el correo electrónico contiene el "ejemplo" de cuerdas, y por lo tanto provocar una excepción.
  6. "Captura" de bloque para coger el "customException" excepción y re-banda.
  7. Capturado "customException", y muestra un mensaje de error.

Si una excepción no se detecta en el bloque actual "tratar", busca el bloque catch en un nivel superior.


De alto nivel conjunto de gestión de excepciones

set_exception_handler función () se puede configurar para manejar toda excepción no detectada de funciones definidas por el usuario.

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

set_exception_handler('myException');

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

La salida del código anterior es el siguiente:

Exception: Uncaught Exception occurred

En el código anterior, no hay ningún bloque de "captura", pero el controlador de excepciones de nivel superior activa. Esta función debe ser usada para capturar toda excepción no detectada.


regla de excepción

  • código de control de excepciones tiene que ser colocado en un bloque try, con el fin de captar posibles excepciones.
  • Cada bloque de código bote ni intente debe tener al menos un bloque catch correspondiente.
  • Se pueden utilizar varios bloques catch para capturar diferentes tipos de excepciones.
  • Puede estar dentro del bloque de código try lanza bloque catch (de nuevo torcer) es una excepción.

En resumen: Si se lanza una excepción, debe cogerlo.