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,
Eccezione per cambiare l'errore di script si verifica quando il flusso normale specificata.
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:
Mostreremo diversi metodi di gestione degli errori:
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.
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
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:
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
Il codice precedente genera un'eccezione e la riprende:
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.
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 ().
Il codice precedente genera un'eccezione, e attraverso una classe di eccezione personalizzata per catturare esso:
È 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(); } ?>
Il codice di cui sopra mette alla prova due condizioni, se uno qualsiasi condizione non è soddisfatta, quindi un'eccezione:
Se eccezione classe customException viene lanciata, ma non catturato customException, catturato solo un'eccezione base, dove le eccezioni della maniglia.
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(); } ?>
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:
Se un'eccezione non viene rilevata nel blocco attuale "provare", sembra per il blocco catch a un livello superiore.
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.
In breve: se si lancia una eccezione, è necessario prenderlo.