Latest web development tutorials
×

PHP curso

PHP curso PHP breve introdução PHP instalar PHP gramática PHP variável PHP echo/print PHP Tipos de dados PHP constante PHP corda PHP operadores PHP If...Else PHP Switch PHP ordem PHP Classificação de uma matriz PHP superglobais PHP While circulação PHP For circulação PHP função PHP Variáveis ​​mágicas PHP namespaces PHP Object-Oriented

PHP formulário

PHP formulário PHP Autenticação de formulários PHP formulário - campos obrigatórios PHP formulário - -mail de verificação e URL PHP instância de formulário completo PHP $_GET variável PHP $_POST variável

PHP Tutorial avançado

PHP arrays multidimensionais PHP data PHP conter PHP arquivo PHP Carregar arquivo PHP Cookie PHP Session PHP E-mail PHP segurança E-mail PHP Error PHP Exception PHP filtro PHP Filtro avançado PHP JSON

PHP 7 novos Recursos

PHP 7 novos Recursos

PHP banco de dados

PHP MySQL breve introdução PHP MySQL conexão PHP MySQL Criação de um banco de dados PHP MySQL Criar uma tabela de dados PHP MySQL inserir dados PHP MySQL Inserir dados múltiplos PHP MySQL instruções preparadas PHP MySQL ler dados 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 introdução AJAX PHP AJAX banco de dados AJAX XML AJAX busca em tempo real AJAX RSS Reader AJAX voto

PHP manual de referência

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 Processamento de imagem PHP RESTful

manipulação de exceção PHP

Excepção para mudar o erro de script ocorre quando o fluxo normal especificada.


O que é anormal

PHP 5 oferece um novo método para a manipulação orientada a objeto de erro.

A manipulação de exceção é usado quando o erro especificado (exceção) ocorre para alterar o fluxo normal do script. Esta condição é chamada uma exceção.

Quando uma exceção é acionada, normalmente ela ocorre:

  • estado de código atual é salvo
  • execução de código é transferido para um (personalizado) função pré-definida manipulador de exceção
  • Em alguns casos, o processador pode ser reiniciada a partir do código armazenado no código de status, terminar a execução do script ou continuar o script a partir de um código local diferente

Vamos mostrar os diferentes métodos de tratamento de erros:

  • exceção uso básico
  • Criando um manipulador de exceção personalizada
  • várias exceções
  • relança
  • Top-level set manipulador de exceção

Nota: As excepções só devem utilizar em caso de erro, ele não deve ser usado num ponto especificado para saltar para outro local no código.


exceção uso básico

Quando uma exceção é lançada, o código subsequente não procede, o PHP irá tentar encontrar a correspondência bloco "catch".

Se uma exceção não for pega, mas não qualquer com o uso de set_exception_handler () para o tratamento correspondente, em seguida, um erro grave (erro fatal) ocorre, e as mensagens de saída "exceção não pega" (exceção não detectada) de erro.

Vamos tentar lançar uma exceção, mas não pegá-lo:

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

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

O código acima irá obter um erro semelhante a este:

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

Tente, jogar e pegar

Para evitar erros que aparecem no exemplo acima, precisamos criar o código apropriado para lidar com exceções.

código de excepção manipulação adequada deve incluir:

  1. Tente - usando função anormal deve estar localizado dentro do bloco "try". Se nenhuma exceção é acionada, o código continuará como de costume. No entanto, se uma exceção é acionada, ele irá lançar uma exceção.
  2. Throw - em como acionar as disposições de excepção. Cada "jogar" deve corresponder a pelo menos um "catch".
  3. Trave - bloco "catch" captura a exceção e cria um objeto que contém a mensagem de exceção.

Vamos desencadear uma exceção:

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

O código acima irá obter um erro como este:

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

Exemplos explicar:

O código acima lança uma exceção e pega-lo:

  1. Criar função checkNum (). Ele detecta se um número é maior que um. Se for, uma exceção é lançada.
  2. Chamar função checkNum () em um bloco "try".
  3. checkNum () exceção função é lançada.
  4. "Catch" bloco recebe a exceção e cria um objeto que contém informações sobre a exceção ($ e).
  5. Chamando $ e- partir desta objetos de exceção> getMessage (), a saída da mensagem de erro para a exceção.

No entanto, a fim de seguir o "cada lance deve corresponder a um catch" princípio, você pode configurar um manipulador de exceção de nível superior para lidar com erros não atendidas.


Criar uma classe de exceção personalizada

Criando um manipulador de exceção personalizada é muito simples. Nós simplesmente criamos uma classe especial, quando uma exceção ocorre em PHP, você pode chamar suas funções. A classe deve ser uma extensão da classe de exceção.

A classe de exceção personalizada herda todos os atributos definidos na classe de exceção PHP, você pode querer adicionar funções personalizadas.

Comece por criar classes de exceção:

<?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 nova classe é uma cópia da antiga classe de exceção, mais a função errorMessage (). Porque é uma cópia da antiga classe, por isso, herda as propriedades da classe de idade e métodos, podemos usar os métodos da classe de exceção, como getLine (), getFile () e getMessage ().

Exemplos explicar:

O código acima lança uma exceção, e através de uma classe de exceção personalizada para capturá-lo:

  1. customException () da classe como uma extensão da antiga classe de exceção para criar. Para que ele herda todos os atributos e métodos da velha classe de exceção.
  2. Criar função errorMessage (). Se o endereço de e-mail é inválido, a função retorna uma mensagem de erro.
  3. A variável $ email está definido para cadeia endereço de e-mail inválido.
  4. A implementação do bloco "try", uma vez que o endereço de e-mail não é válido e, portanto, gera uma exceção.
  5. "Catch" bloco para capturar a exceção e exibe uma mensagem de erro.

várias exceções

Você pode usar várias exceções como um script para detectar uma variedade de situações.

Você pode usar o bloco de múltipla if..else, ou um bloco de interruptor de código, ou aninhar várias exceções. Essas exceções podem usar diferentes classes de exceção e retornar diferentes mensagens de erro:

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

Exemplos explicar:

O código acima testa duas condições, se houver uma condição não for satisfeita, então lançar uma exceção:

  1. customException () da classe como uma extensão da antiga classe de exceção para criar. Para que ele herda todos os atributos e métodos da velha classe de exceção.
  2. Criar função errorMessage (). Se o endereço de e-mail é inválido, a função retorna uma mensagem de erro.
  3. A variável $ email é definido como uma cadeia que é um endereço de e-mail válido, mas contém a cadeia "exemplo".
  4. A implementação de "tentar" bloco de código na primeira condição, nenhuma exceção é lançada.
  5. Uma vez que o e-mail contém o "exemplo" string, a segunda condição desencadeia uma exceção.
  6. "Catch" bloco de captura a exceção e exibir a mensagem de erro apropriada.

Se exceção classe customException é jogado, mas não pegou customException, capturado apenas uma exceção base, onde as exceções do punho.


relança

Às vezes, quando uma exceção é lançada, você pode querer ser diferente da forma padrão de lidar com isso. Pode voltar a ser jogado em um bloco "catch".

O script deve ser escondido dos erros do sistema do usuário. Para os programadores, erros de sistema pode ser importante, mas o usuário não está interessado neles. Para tornar mais fácil para os usuários a usar, você pode lançar uma exceção novamente com mensagem relativamente user-friendly:

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

Exemplos explicar:

O código acima é detectado no endereço de e-mail se ele contém a cadeia "exemplo". Se não é, novamente, uma exceção é lançada:

  1. customException () da classe como uma extensão da antiga classe de exceção para criar. Para que ele herda todos os atributos e métodos da velha classe de exceção.
  2. Criar função errorMessage (). Se o endereço de e-mail é inválido, a função retorna uma mensagem de erro.
  3. A variável $ email é definido como uma cadeia que é um endereço de e-mail válido, mas contém a cadeia "exemplo".
  4. "Experimente" bloco contém um outro bloco "try" de código, para que possa lançar uma exceção novamente.
  5. Uma vez que o e-mail contém o "exemplo" string, e, portanto, desencadear uma exceção.
  6. "Catch" bloco para capturar a exceção e re-lance "customException".
  7. Capturados "customException", e exibe uma mensagem de erro.

Se uma exceção não é detectada no bloco atual "tentar", ele olha para o bloco catch em um nível superior.


Top-level set manipulador de exceção

função set_exception_handler () pode ser configurado para lidar com todas exceção não capturada de funções definidas pelo usuário.

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

set_exception_handler('myException');

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

A saída do código de cima é o seguinte:

Exception: Uncaught Exception occurred

No código acima, não há nenhum bloco "catch", mas o manipulador de exceção de nível superior acionado. Esta função deve ser usada para capturar todos os exceção não capturada.


regra de exceção

  • código de manipulação de exceção precisa ser colocado em um bloco try, a fim de capturar possíveis exceções.
  • Cada bloco de código jogue ou tente deve ter pelo menos um correspondente catch bloco.
  • Você pode usar vários blocos catch para capturar diferentes tipos de exceções.
  • Pode estar dentro do bloco de código try lança bloco catch (novamente jogado) exceção.

Em suma: se você lançar uma exceção, você deve pegá-lo.