Latest web development tutorials
×

PHP corso

PHP corso PHP breve introduzione PHP installare PHP grammatica PHP variabile PHP echo/print PHP Tipi di dati PHP costante PHP stringa PHP operatori PHP If...Else PHP Switch PHP schieramento PHP Ordinamento di un array PHP superglobals PHP While circolazione PHP For circolazione PHP funzione PHP Variabili magici PHP Namespace PHP Object-Oriented

PHP modulo

PHP modulo PHP Forms Authentication PHP modulo - I campi obbligatori PHP modulo - e-mail di verifica e l'URL PHP esempio forma completa PHP $_GET variabile PHP $_POST variabile

PHP Tutorial avanzato

PHP array multidimensionali PHP data PHP contenere PHP file PHP File Upload PHP Cookie PHP Session PHP E-mail PHP sicurezza E-mail PHP Error PHP Exception PHP filtro PHP Filtro avanzato PHP JSON

PHP 7 nuove funzionalità

PHP 7 nuove funzionalità

PHP Database

PHP MySQL breve introduzione PHP MySQL collegamento PHP MySQL Creazione di un database PHP MySQL Creare una tabella di dati PHP MySQL inserire i dati PHP MySQL Inserire più dati PHP MySQL prepared statement PHP MySQL leggere i dati 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 introduzione AJAX PHP AJAX Database AJAX XML AJAX ricerca in tempo reale AJAX RSS Reader AJAX voto

PHP Manuale di riferimento

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 Elaborazione immagini PHP RESTful

la gestione delle eccezioni PHP

Eccezione per cambiare l'errore di script si verifica quando il flusso normale specificata.


Ciò che è anormale

PHP 5 offre un nuovo metodo per la gestione degli errori orientata agli oggetti.

La gestione delle eccezioni viene utilizzato quando l'errore specificato (eccezione) si verifica per modificare il normale flusso dello script. Questa condizione è chiamata un'eccezione.

Quando un'eccezione viene attivato, di solito si verifica:

  • stato codice corrente viene salvato
  • l'esecuzione di codice viene commutata a una funzione di gestione delle eccezioni predefinito (personalizzato)
  • In alcuni casi, il processore può essere riavviata dal codice memorizzato nel codice di stato, interrompere l'esecuzione dello script o continuare lo script da un codice di posizione diversa

Mostreremo diversi metodi di gestione degli errori:

  • eccezione Utilizzo di base
  • La creazione di un gestore di eccezioni personalizzato
  • più eccezioni
  • genera nuovamente
  • Top-livello impostato gestore di eccezioni

Nota: Le eccezioni dovrebbero utilizzare solo in caso di errore, ma non dovrebbe essere usato in un punto specifico per passare a un'altra posizione nel codice.


eccezione Utilizzo di base

Quando viene generata un'eccezione, il codice successivo non procede, PHP cercherà di trovare l'abbinamento blocco "catturare".

Se un'eccezione non viene catturato, ma ora non con l'uso di set_exception_handler () per il trattamento corrispondente, quindi un grave errore (errore fatale) si verifica, e l'uscita dei messaggi (eccezioni non rilevate) di errore "eccezione non rilevata".

Cerchiamo di un'eccezione, ma non prenderlo:

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

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

Il codice di cui sopra si ottiene un errore simile a questo:

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

Provate, gettare e cattura

Per evitare errori che compaiono nel precedente esempio, abbiamo bisogno di creare il codice appropriato per gestire le eccezioni.

Una corretta gestione del codice eccezione include:

  1. Prova - utilizzando funzione anormale dovrebbe essere situato all'interno del blocco "try". Se nessuna eccezione viene attivato, il codice continuerà come al solito. Tuttavia, se l'eccezione viene attivato, sarà un'eccezione.
  2. Buttare - in modo per innescare le disposizioni di eccezione. Ogni "tiro" deve corrispondere ad almeno una "catturare".
  3. Catch - blocco "catturare" cattura l'eccezione e crea un oggetto che contiene il messaggio di eccezione.

Lasciate innescare una eccezione:

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

Il codice di cui sopra si ottiene un errore come questo:

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

Esempi spiegano:

Il codice precedente genera un'eccezione e la riprende:

  1. Creare la funzione checkNum (). Si rileva se un numero è maggiore di uno. Se lo è, viene generata un'eccezione.
  2. Chiamare la funzione checkNum () in un blocco "try".
  3. checkNum () tranne la funzione viene generata.
  4. "Catch" blocco riceve l'eccezione e crea un oggetto che contiene informazioni sul l'eccezione ($ e).
  5. Chiamando $ e- da questo oggetti eccezione> getMessage (), l'uscita dal messaggio di errore per l'eccezione.

Tuttavia, al fine di seguire il "ogni tiro deve corrispondere ad una cattura" linea di principio, è possibile impostare un gestore di eccezioni di alto livello per gestire gli errori mancati.


Creare una classe eccezione personalizzata

La creazione di un gestore di eccezioni personalizzato è molto semplice. Abbiamo semplicemente creare una classe speciale, quando si verifica un'eccezione in PHP, è possibile chiamare le sue funzioni. La classe deve essere un'estensione della classe eccezione.

La classe di eccezione personalizzato eredita tutti gli attributi definiti nella classe di eccezione PHP, è possibile aggiungere funzioni personalizzate.

Inizia con la creazione di classi di eccezione:

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

Questa nuova classe è una copia della vecchia classe di eccezione, oltre a funzioni errorMessage (). Poiché si tratta di una copia della vecchia classe, in modo che eredita dalle proprietà della classe vecchi e metodi, possiamo usare i metodi della classe di eccezione, come getline (), getFile () e getMessage ().

Esempi spiegano:

Il codice precedente genera un'eccezione, e attraverso una classe di eccezione personalizzata per catturare esso:

  1. customException () classe come un'estensione della vecchia classe eccezione a creare. In modo che eredita tutti gli attributi ei metodi della vecchia classe di eccezione.
  2. Creare la funzione errorMessage (). Se l'indirizzo e-mail non è valido, la funzione restituisce un messaggio di errore.
  3. La variabile $ email è impostata su valida stringa di indirizzo e-mail.
  4. L'attuazione di blocco "provare", dal momento che l'indirizzo e-mail non è valido, e lancia quindi un'eccezione.
  5. "Catch" blocco per catturare l'eccezione e visualizza un messaggio di errore.

più eccezioni

È possibile utilizzare più eccezioni come uno script per rilevare una varietà di situazioni.

È possibile utilizzare blocchi multipla if..else, o un blocco di interruttore di codice, o nido più eccezioni. Queste eccezioni possono utilizzare diverse classi di eccezioni e tornare diversi messaggi di errore:

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

Esempi spiegano:

Il codice di cui sopra mette alla prova due condizioni, se uno qualsiasi condizione non è soddisfatta, quindi un'eccezione:

  1. customException () classe come un'estensione della vecchia classe eccezione a creare. In modo che eredita tutti gli attributi ei metodi della vecchia classe di eccezione.
  2. Creare la funzione errorMessage (). Se l'indirizzo e-mail non è valido, la funzione restituisce un messaggio di errore.
  3. La variabile $ email è impostata su una stringa che è un indirizzo e-mail valido, ma contiene la stringa "esempio".
  4. L'attuazione di "provare" blocco di codice nella prima condizione, non viene generata un'eccezione.
  5. Poiché la posta elettronica contiene la stringa "esempio", la seconda condizione attiva un'eccezione.
  6. "Catch" blocco cattura l'eccezione e visualizzare il messaggio di errore appropriato.

Se eccezione classe customException viene lanciata, ma non catturato customException, catturato solo un'eccezione base, dove le eccezioni della maniglia.


genera nuovamente

A volte, quando viene generata un'eccezione, si potrebbe desiderare di essere diverso dal modo standard per gestire la cosa. Può ancora essere gettato in un blocco "catturare".

Lo script dovrebbe essere nascosto agli errori di sistema dell'utente. Per i programmatori, gli errori di sistema possono essere importanti, ma l'utente non è interessato a loro. Per rendere più facile per gli utenti di utilizzare, è possibile generare un'eccezione di nuovo con un messaggio relativamente facile da usare:

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

Esempi spiegano:

Il codice di cui sopra viene rilevato l'indirizzo e-mail se contiene la stringa "esempio". Se non vi è, ancora una volta, viene generata un'eccezione:

  1. customException () classe come un'estensione della vecchia classe eccezione a creare. In modo che eredita tutti gli attributi ei metodi della vecchia classe di eccezione.
  2. Creare la funzione errorMessage (). Se l'indirizzo e-mail non è valido, la funzione restituisce un messaggio di errore.
  3. La variabile $ email è impostata su una stringa che è un indirizzo e-mail valido, ma contiene la stringa "esempio".
  4. "Prova" blocco contiene un altro blocco "provare" di codice, in modo da poter rilanciare un'eccezione.
  5. Dal momento che l'e-mail contiene la stringa "esempio", e quindi attivare un'eccezione.
  6. "Catch" blocco per prendere il "customException" eccezione e ri-lancio.
  7. Catturato "customException", e visualizza un messaggio di errore.

Se un'eccezione non viene rilevata nel blocco attuale "provare", sembra per il blocco catch a un livello superiore.


Top-livello impostato gestore di eccezioni

set_exception_handler function () può essere impostata per gestire tutte le eccezioni non rilevate delle funzioni definite dall'utente.

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

set_exception_handler('myException');

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

L'output del codice sopra è il seguente:

Exception: Uncaught Exception occurred

Nel codice di cui sopra, non vi è alcun blocco "catturare", ma il gestore di eccezioni di alto livello attivato. Questa funzione dovrebbe essere usata per catturare tutti eccezione non identificata.


deroga

  • codice di gestione delle eccezioni deve essere collocato in un blocco try, al fine di catturare potenziali eccezioni.
  • Ogni blocco lanciare o cercare codice deve avere almeno un corrispondente blocco catch.
  • È possibile utilizzare più blocchi catch per catturare diversi tipi di eccezioni.
  • Può essere all'interno del blocco di codice try genera blocco catch (ancora una volta gettato) eccezione.

In breve: se si lancia una eccezione, è necessario prenderlo.