在實際開發中,錯誤及異常捕捉僅僅靠try{}catch()是遠遠不夠的。
所以引用以下幾中函式。
a) set_error_handler
一般用於捕捉 e_notice 、e_user_error、e_user_warning、e_user_notice
不能捕捉:
e_error, e_parse, e_core_error, e_core_warning, e_compile_error and e_compile_warning。
一般與trigger_error("...", e_user_error),配合使用。
[php]view plain
copy
print?
<?php
// we will do our own error handling
error_reporting
(0);
function
usererrorhandler(
$errno
, $errmsg
, $filename
, $linenum
, $vars
)
$err
.= "\n\n"
; echo
$err
; }
function
distance(
$vect1
, $vect2
) if(
count
($vect1
) !=
count
($vect2
))
for(
$i=0;
$i<
count
($vect1
); $i
++)
if(!
is_numeric
($c2
))
$d+=
$c2*
$c2-
$c1*
$c1;
}
return
sqrt(
$d);
} $old_error_handle
= set_error_handler(
"usererrorhandler"
);
$t= i_am_not_defined;
//generates a warning
// define some "vectors"
$a=
array
(2, 3,
"foo"
);
$b=
array
(5.5, 4.3, -1.6);
$c=
array
(1, -3);
//generate a user error
$t1= distance($c,
$b);
// generate another user error
$t2= distance(
$b,
"i am not an array"
) .
"\n"
; // generate a warning
$t3= distance(
$a,
$b) .
"\n"
; ?>
b) set_exception_handler
設定預設的異常處理程式,用於沒有用 try/catch 塊來捕獲的異常。 在 exception_handler 呼叫後異常會中止。
與throw new exception('uncaught exception occurred'),連用。
[php]view plain
copy
print?
<?php
// we will do our own error handling
error_reporting
(0);
function
excepthandle(
$errno
, $errmsg
, $filename
, $linenum
, $vars
)
$err
.= "\n\n"
; echo
$err
; }
$old_except_handle
= set_exception_handler(
"excepthandle"
);
//$t = i_am_not_defined; //generates a warning
$a;
throw
newexception(
'uncaught exception occurred'
);
?>
c) register_shutdown_function
執行機制是:php把要呼叫的函式調入記憶體。當頁面所有php語句都執行完成時,再呼叫此函式。
一般與trigger_error("...", e_user_error),配合使用。
[php]view plain
copy
print?
<?php
error_reporting
(0);
date_default_timezone_set('asia/shanghai'
);
register_shutdown_function('my_exception_handler'
);
$t= i_am_not_defined;
//generates a warning
trigger_error("vectors need to be of the same size"
, e_user_error);
function
my_exception_handler()
} ?>
c) restore_error_handler()函式
定義和用法 restore_error_handler() 函式恢復之前的錯誤處理程式,該程式是由 set_error_handler() 函式改變的。
該函式永遠返回 true。
是set_error_handler()的反函式。
php 捕捉mysql錯誤 PHP捕捉錯誤
php捕捉錯誤 禁止錯誤輸出 error reporting 0 設定錯誤處理器 set error handler errorhandler 在指令碼結束時執行的函式 register shutdown function fatalerrorhandler 錯誤處理 param int err n...
關於PHP自動捕捉處理錯誤和異常的嘗試
之所以想著做錯誤和異常的自動處理是因為 用的公司自己的框架寫api,沒有異常和錯誤相關功能,而每次操作都進行try.catch,有點繁瑣不說,感覺還很雞肋,即使我catch到了,還是得寫 進行處理,哪怕封裝了乙個方法進行處理也還是繁瑣,這種情況應該是程式自動進行處理,不該是這樣弱智的人工try.ca...
PHP 錯誤處理及異常處理
1.設定自己的錯誤處理函式 trigger error 捕捉使用者級別的錯誤。set error handler 使用者自定義錯誤處理函式。2.捕獲異常 捕獲異常當然用trycatch 當然 中使用的異常處理類是thinkphp中,throw exception 為thinkphp的丟擲異常函式 另...