Latest web development tutorials
×

PHP cours

PHP cours PHP Brève introduction PHP installer PHP grammaire PHP variable PHP echo/print PHP Types de données PHP constante PHP chaîne PHP opérateurs PHP If...Else PHP Switch PHP tableau PHP Tri d'un tableau PHP Superglobales PHP While circulation PHP For circulation PHP fonction PHP Variables magiques PHP Namespaces PHP Object-Oriented

PHP forme

PHP forme PHP Authentification Forms PHP forme - Les champs obligatoires PHP forme - email de vérification et d'URL PHP Complète instance de formulaire PHP $_GET variable PHP $_POST variable

PHP Tutorial avancée

PHP Les tableaux multidimensionnels PHP date PHP contenir PHP fichier PHP File Upload PHP Cookie PHP Session PHP E-mail PHP sécurité E-mail PHP Error PHP Exception PHP filtre PHP filtre avancé PHP JSON

PHP 7 Nouvelles fonctionnalités

PHP 7 Nouvelles fonctionnalités

PHP Base de données

PHP MySQL Brève introduction PHP MySQL raccordement PHP MySQL La création d'une base de données PHP MySQL Créer une table de données PHP MySQL Insérer des données PHP MySQL Insérez des données multiples PHP MySQL Déclarations préparées PHP MySQL Lire les données 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 Brève introduction AJAX PHP AJAX Base de données AJAX XML AJAX Recherche en temps réel AJAX RSS Reader AJAX vote

PHP Manuel de référence

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 Traitement de l'image PHP RESTful

gestion des exceptions PHP

Exception pour modifier l'erreur de script se produit lorsque le flux normal spécifié.


Ce qui est anormal

PHP 5 offre une nouvelle méthode d'erreur orientée objet de manipulation.

La gestion des exceptions est utilisée lorsque l'erreur spécifié (exception) se produit pour changer l'écoulement normal du script. Cette condition est appelée une exception.

Quand une exception est déclenchée, généralement, il se produit:

  • état de code actuel est enregistré
  • L'exécution de code est mis à un (personnalisé) fonction prédéfinie de gestionnaire d'exception
  • Dans certains cas, le processeur peut être redémarré à partir du code stocké dans le code d'état, mettre fin à l'exécution du script ou continuer le script à partir d'un code d'emplacement différent

Nous allons montrer les différentes méthodes de traitement des erreurs:

  • utilisation exception de base
  • Création d'un gestionnaire d'exception personnalisée
  • exceptions multiples
  • Rethrows
  • Top-level gestionnaire d'exceptions ensemble

Note: Des exceptions ne devraient utiliser en cas d'erreur, il ne devrait pas être utilisé dans un point spécifié pour passer à un autre emplacement dans le code.


utilisation exception de base

Quand une exception est levée, le code ultérieur ne procède pas, PHP va essayer de trouver la correspondance bloc "catch".

Si une exception est pas pris, mais pas avec l'utilisation de set_exception_handler () pour le traitement correspondant, puis une grave erreur (erreur fatale) se produit, et les messages de la sortie "Exception Uncaught" (Uncaught exception) d'erreur.

Essayons de lancer une exception, mais ne pas l'attraper:

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

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

Le code ci-dessus recevra une erreur semblable à ceci:

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

Essayez, lancer et à attraper

Pour éviter les erreurs apparaissant dans l'exemple ci-dessus, nous avons besoin de créer le code approprié pour gérer les exceptions.

Une manipulation correcte code d'exception devrait inclure:

  1. Essayez - en utilisant la fonction anormale doit être situé dans le bloc "essayer". Si aucune exception est déclenchée, le code continuera comme d'habitude. Toutefois, si une exception est déclenchée, elle lancera une exception.
  2. Jetez - dans la façon de déclencher les dispositions d'exception. Chaque «jeter» doit correspondre à au moins un "catch".
  3. Catch - bloc "catch" intercepte l'exception et crée un objet contenant le message d'exception.

Laissez déclencher une exception:

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

Le code ci-dessus obtiendrez une erreur comme ceci:

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

Exemples expliquent:

Le code ci-dessus renvoie une exception et l'attrape:

  1. Créer la fonction checkNum (). Détecte si un nombre est supérieur à un. Dans ce cas, une exception est levée.
  2. Appel de la fonction checkNum () dans un bloc "essayer".
  3. checkNum () fonction exception est levée.
  4. "Catch" bloc reçoit l'exception et crée un objet qui contient des informations sur l'exception ($ e).
  5. En appelant e- $ de cette exception objets> getMessage (), la sortie du message d'erreur pour l'exception.

Toutefois, afin de suivre la "chaque lancer doit correspondre à une prise« principe, vous pouvez configurer un gestionnaire d'exception de haut niveau pour gérer les erreurs manquées.


Créer une classe d'exception personnalisée

Création d'un gestionnaire d'exception personnalisée est très simple. Nous créons simplement une classe spéciale, lorsqu'une exception se produit en PHP, vous pouvez appeler ses fonctions. La classe doit être une extension de la classe d'exception.

La classe d'exception personnalisée hérite de tous les attributs définis dans la classe d'exception PHP, vous pouvez ajouter des fonctions personnalisées.

Commencez par créer des classes d'exception:

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

Cette nouvelle classe est une copie de l'ancienne classe d'exception, plus la fonction errorMessage (). Parce qu'il est une copie de l'ancienne classe, il hérite des anciennes propriétés et méthodes de classe, nous pouvons utiliser les méthodes de la classe d'exception, comme getLine (), getFile () et getMessage ().

Exemples expliquent:

Le code ci-dessus renvoie une exception, et à travers une classe d'exception personnalisée pour capturer:

  1. customException () classe comme une extension de l'ancienne classe d'exception pour créer. Alors qu'il hérite de tous les attributs et les méthodes de l'ancienne classe d'exception.
  2. Créer la fonction errorMessage (). Si l'adresse e-mail est invalide, la fonction renvoie un message d'erreur.
  3. La variable $ email est réglé invalide Adresse e-mail chaîne.
  4. La mise en œuvre de "essayer" bloc, car l'adresse e-mail est pas valable, et jette donc une exception.
  5. "Catch" bloc pour attraper l'exception et affiche un message d'erreur.

exceptions multiples

Vous pouvez utiliser plusieurs exceptions comme un script pour détecter une variété de situations.

Vous pouvez utiliser le bloc multiple if..else, ou un bloc de commutateur de code, ou imbriquer plusieurs exceptions. Ces exceptions peuvent utiliser différentes classes d'exception et de retour différents messages d'erreur:

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

Exemples expliquent:

Le code ci-dessus teste deux conditions, le cas échéant une condition est pas satisfait, puis lancer une exception:

  1. customException () classe comme une extension de l'ancienne classe d'exception pour créer. Alors qu'il hérite de tous les attributs et les méthodes de l'ancienne classe d'exception.
  2. Créer la fonction errorMessage (). Si l'adresse e-mail est invalide, la fonction renvoie un message d'erreur.
  3. La variable $ email est défini sur une chaîne qui est une adresse e-mail valide, mais contient la chaîne "exemple".
  4. La mise en œuvre de "essayer" bloc de code dans la première condition, sans exception est levée.
  5. Depuis l'e-mail contient la chaîne "exemple", la seconde condition déclenche une exception.
  6. "Catch" bloc intercepte l'exception et affiche le message d'erreur approprié.

Si customException classe exception est levée, mais pas pris customException, capturé seulement une exception de base, où les exceptions de la poignée.


Rethrows

Parfois, quand une exception est levée, vous voudrez peut-être différente de la manière standard pour le gérer. Peut encore être jeté dans un bloc "catch".

Le script doit être caché des erreurs du système de l'utilisateur. Pour les programmeurs, les erreurs de système peuvent être importants, mais l'utilisateur ne souhaite pas eux. Pour le rendre plus facile pour les utilisateurs à utiliser, vous pouvez lancer une exception à nouveau avec un message relativement facile à utiliser:

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

Exemples expliquent:

Le code ci-dessus est détectée dans l'adresse e-mail si elle contient la chaîne "exemple". S'il n'y a, à nouveau, une exception est levée:

  1. customException () classe comme une extension de l'ancienne classe d'exception pour créer. Alors qu'il hérite de tous les attributs et les méthodes de l'ancienne classe d'exception.
  2. Créer la fonction errorMessage (). Si l'adresse e-mail est invalide, la fonction renvoie un message d'erreur.
  3. La variable $ email est défini sur une chaîne qui est une adresse e-mail valide, mais contient la chaîne "exemple".
  4. "Essayer" bloc contient un autre bloc "essayer" de code, de sorte que vous pouvez lancer une exception à nouveau.
  5. Depuis l'e-mail contient la chaîne "exemple", et donc déclencher une exception.
  6. "Catch" bloc pour attraper l'exception et re-jeter "customException".
  7. Capturé "customException", et affiche un message d'erreur.

Si une exception est pas pris dans le bloc courant "essayer", il semble pour le bloc de capture à un niveau supérieur.


Top-level gestionnaire d'exceptions ensemble

fonction set_exception_handler () peut être configuré pour gérer toutes exception uncaught des fonctions définies par l'utilisateur.

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

set_exception_handler('myException');

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

La sortie du code ci-dessus est la suivante:

Exception: Uncaught Exception occurred

Dans le code ci-dessus, il n'y a pas de bloc "catch", mais le gestionnaire d'exception de haut niveau déclenché. Cette fonction devrait être utilisée pour capturer toute exception uncaught.


Règle d'exception

  • Code de gestion des exceptions doit être placé dans un bloc d'essai, afin d'intercepter les exceptions possibles.
  • Chaque lancer ou bloc de code doit avoir au moins un bloc catch correspondant.
  • Vous pouvez utiliser plusieurs blocs catch pour attraper différents types d'exceptions.
  • Peut-être dans le bloc de code try lance bloc catch (encore une fois jeté) d'exception.

En bref: Si vous jetez une exception, vous devez l'attraper.