php-自定義錯誤類
今天在例行寫php程式碼的時候,papapa 敲完,自我感覺良好,一執行,直接報錯 。 what a fuck ! 不可能! 肯定是我執行的姿勢不對,對於用習慣了laravel框架的我,內心直接吶喊三連。 仔細看程式碼,確實有try, catch 捕獲異常。 不信這個邪,搞點牛逼的程式碼再試試:
try { echo 1/0; } catch (Exception $e) { echo $e->getMessage(); }
一試,果然還是報錯啊,內心5s內久久不能冷靜下來,感覺自己一直以來學的是假的php. 一直以來對異常處理挺模糊的,而今天又是個陽光明媚櫻花盛開適合學習的日子(廣告一波:我武大櫻花挺美的),立下了flag,學習之!
說幹就幹,百度,這裡就不得不說一篇文章,寫的太特麼好了,感謝作者,連結地址再談PHP錯誤與異常處理,只是在人群中多看了一眼,就被吸引住了。綜合的查了下 php錯誤有以下幾種:
E_ERROR:通常會顯示出來,也會中斷程式執行。
E_WARNING:通常都會顯示出來,但不會中斷程式的執行。
E_NOTICE:在指令碼正常執行下發生的程式碼錯誤。
E_PARSE:語法解析錯誤。
E_CORE_ERROR:在PHP啟動時發生的致命錯誤。
E_CORE_WARNING:報告在PHP啟動時發生的非致命性錯誤。
E_COMPILE_ERROR:編譯時發生的致命錯誤,指出指令碼的錯誤。
E_USER_ERROR:使用者產生的錯誤資訊。
E_USER_WARNING:使用者產生的警告資訊。
E_USER_NOTICE:使用者引發的注意訊息。
E_STRICT:編碼標準化警告,執行時發生的錯誤。
E_RECOVERABLE_ERROR:接近致命的執行時錯誤,若未被捕獲則視同E_ERROR。
E_ALL:捕獲所有的錯誤和警告。
而try{} catch(){} 模組只能捕獲有限的錯誤,一般情況下需要程式碼程式碼段丟擲異常才能被捕獲到,比如:
try { throw new Exception('同志,醒醒,報錯了'); } catch (Exception $e) { echo $e->getMessage(); }
一看到這,我內心5T的草你馬飛過,我他麼都知道有錯誤了還不直接改嗎?還要丟擲幹嘛。 上面說到的那篇文章再談PHP錯誤與異常處理 又解惑了,原來php內建了 set_error_handler(),register_shutdown_function(),set_exception_handler()三個能夠捕獲異常的神器,三個函式怎麼實現的以後再探討,反正很牛逼。簡單介紹下三個函式:
set_error_handler() : 能處理E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING,E_STRICT,該函式只能捕獲系統產生的一些Warning、Notice級別的錯誤
register_shutdown_function() : 捕獲PHP的錯誤:Fatal Error、Parse Error等,這個方法是PHP指令碼執行結束前最後一個呼叫的函式,比如指令碼錯誤、die()、exit、異常、正常結束都會呼叫
set_exception_handler() : 設定預設的異常處理程式,用在沒有用try/catch塊來捕獲的異常
再次感謝再談PHP錯誤與異常處理 的作者! 好了,接下來就利用 這set_error_handler函式分別實現一個自定義異常類:MyErrorException,廢話少說,直接上可執行的程式碼:
MyErrorException:
final class MyErrorException extends Exception {
protected static $instance;
protected $message;
protected $file;
protected $line;
protected $type;
public function __construct($message , $file , $line , $type ) {
$this->message = $message;
$this->file = $file;
$this->line = $line;
$this->type = $type;
}
public function message() {
return $this->message;
}
public function file() {
return $this->file;
}
public function line() {
return $this->line;
}
public function type() {
return $this->type;
}
public static function setException($type , $message , $file ,$line) {
if(empty(self::$instance))
{
self::$instance = new self($message , $file , $line , $type);
throw self::$instance;
} else {
$instance = self::$instance;
$instance->message = $message;
$instance->type = $type;
$instance->line = $line;
$instance->file = $file;
throw $instance;
}
}
}
set_error_handler(array('MyErrorException','setException'));
try {
echo 1/0;
} catch (MyErrorException $e) {
echo $e->message() . $e->line() . $e->file() . $e->type();
}
相關推薦
php-自定義錯誤類
今天在例行寫php程式碼的時候,papapa 敲完,自我感覺良好,一執行,直接報錯 。 what a fuck ! 不可能! 肯定是我執行的姿勢不對,對於用習慣了laravel框架的我,內心直接吶喊三連。 仔細看程式碼,確實有try, catch 捕獲異常。 不信
php 自定義錯誤觸發資訊
ini_set("display_errors",0); // 使用者定義的錯誤處理函式 function my_error_handler($errno, $errstr, $errfile, $er
4、php的錯誤異常處理(自定義異常類)
一、php自帶的異常處理類: <?php class Exception { protected $message; // 異常資訊 protected $code; //
php 自定義 autoload.php 自動載入類
* 目錄結構 * autoload.php <?php // autoload ./et/lib spl_autoload_register(function($class) { $prefix = 'et\\lib'; $base_dir =
php自帶壓縮類壓縮文件夾
tac true pre 失敗 osi alert 關閉 自動 對象傳遞 // 壓縮文件夾 function addFileToZip($path,$zip){ $handler=opendir($path); //打開當前文件夾由$path指定。 whi
Java用自定義的類型作為HashMap的key
str boolean 順序 string 函數 出現 print 重新 對象 ??需要重寫hashCode()和equals()方法才可以實現自定義鍵在HashMap中的查找。 public class PhoneNumber { private int pre
Laravel之加密解密/日誌/異常處理及自定義錯誤
文件中 例如 tom 處理器 crypt return cat 情況 而不是 一.加密解密 1.加密Crypt::encrypt($request->secret) 2.解密try { $decrypted = Crypt::decrypt($encryptedV
學習筆記19_自定義錯誤頁
默認 errors acc .html 調試 error redirect nbsp edi 在WebConfig中,可以配置當服務器發生哪些錯誤時,能跳轉到那個頁面: <customErrors mode ="On" defaultRedirect = " defa
轉:C#制作ORM映射學習筆記一 自定義Attribute類
技術 sage 其中 username pac ont 學習 collect reat 之前在做unity項目時發現只能用odbc連接數據庫,感覺非常的麻煩,因為之前做web開發的時候用慣了ORM映射,所以我想在unity中也用一下ORM(雖然我知道出於性能的考慮這樣做事不
c#(winform)中自定義ListItem類方便ComboBox添加Item項
urn left over string his 定義 return box item 1.定義ListItem類 public class ListItem { private string _key = string.Empty;
wordpress自定義文章類型描述信息description的使用
方法 類型 fun 應該 global scrip key var_dump script 上節教程中我們添加了一個自定義文章類型,配置使用了lablse參數,這裏繼續講解使用其它的參數。 先看description,這個參數是對新創建的文章類型的一個簡短描述,添加之後後臺
lumen 自定義錯誤日誌文件
參數 glib ace 寫入文件 handle cnblogs 可用 perm ror 自定義錯誤日誌文件,改造新的方法 <?php namespace App; use Monolog\Logger; use Monolog\Handler\StreamHandl
MVC自定義錯誤頁面
scu ebp name lte timeout sts form -m 技術 MVC異常處理主要有三種方案:1.基於HandleErrorAttribute重寫OnException方法;2.基於Global.apsx添加Application_Error方法;3.直
自定義錯誤處理
處理 all 信息 誤報 綁定 ont error () err 自己定義錯誤報告的處理方式。這裏主要是要介紹一個函數set_error_handler ()函數,裏面接受兩個參數(第一個參數是一個回調函數,第二個參數規定哪一個錯報報告級別顯示用戶定義的錯誤,默認值為E_
Tomcat下使用自定義錯誤頁面
tomcat html 最近在整理部分服務器的時候發現有一臺業務量並不是很大的Windows服務器可以下架了,但是目前在服務器上還有一個使用IIS的站點,知道這個站點在平時的訪問量不大,就打算做遷移,打開IIS看了下這個站點上都是html純靜態頁面,連數據庫連接的交互都沒有。好吧,這樣就簡單了,
MVC4 自定義錯誤頁面(三)
gif static quest glob logger tool iis def .cn 一、概述 MVC4框架自帶了定義錯誤頁,該頁面位於Shared/Error,該頁面能夠顯示系統未能捕獲的異常,如何才能使用該頁面; 二、使用步驟: 1、配置WebConfig文件,在
php自定義函數: amr轉mp3格式
com pre php mp3 ams highlight cti ror cal <?php function amr2mp3($file){ if (file_exists($file . ‘.mp3‘) == true) { retur
ASP.NET MVC下自定義錯誤頁和展示錯誤頁的幾種方式
提供服務 one url attribute 運行 16px execute 釋放 namespace 在網站運行中,錯誤是不可避免的,錯誤頁的產生也是不可缺少的。 這幾天看了博友的很多文章,自己想總結下我從中學到的和實際中配置的。 首先,需要知道產生錯誤頁的來源,一種
4. 創建自定義錯誤處理器
定義 .com body 創建 inf class post png log 4. 創建自定義錯誤處理器
php自定義函數: 時間轉換成智能形式
urn 自定義 分鐘 turn 智能 小時 highlight 時間 () function time_trans($paratime,$suffix=false){ $now_time = time(); $dur = $now_time - $para