Il miglior tutorial la gestione delle eccezioni PHP Nel 2024, in questo tutorial puoi imparare Ciò che è anormale,eccezione Utilizzo di base,Provate, gettare e cattura,Esempi spiegano:,Creare una classe eccezione personalizzata,Esempi spiegano:,più eccezioni,Esempi spiegano:,genera nuovamente,Esempi spiegano:,Top-livello impostato gestore di eccezioni,deroga,

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 = "someone@exampleit.com";

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 ifitelse, 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 = "someone@example.com";

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 = "someone@example.com";

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.

la gestione delle eccezioni PHP
10/30