php只有手动抛出异常才能捕获异常
class emailException extends Exception{
//定义魔术方法 ,直接输出对象的信息
public function __toStirng(){
$error = "Code:{$this->getCode()},message:{$this->getMessage()} line:{$this->getLine()},file:{$this->getFile()}";
return $error;
}
}
function reg($i){
if($i>0){
throw new emailException("错误");
}
}
try{
reg($i=6);
}catch(emailException $e){
echo $e;
echo $e->getMessage();
}catch(Exception $e){
$e->getMessage();
}
//此处需要注意 exception 作为超类应该放到最后捕获
//如果提前捕获这个超类,后面的捕获就终止了,而且不提供 针对性的信息处理
运行图
自定义 异常处理函数(只能捕获到异常和非致命的错误,致命的错误还是会挂掉)
function customError($errno,$errstr,$errfile,$errline){
echo "错误代码[${error}]${errstr}"."";
echo "错误所在代码行:{$errline}文件{$errfile}"."";
echo "PHP版本",PHP_VERSION,"(",PHP_OS,")"."";
}
set_error_handler("customError",E_ALL|E_STRICT);
$a = array('o'=>2,4,6,8);
echo $a[o]; //错误的代码
//set_error_handler()函数会接管php内置的错误处理,
//可以在同一个页面使用 restore_error_handler()取消接管
运行图:
简单处理fetal error的错误
class Shutdown{
public function stop(){
if(error_get_last()){
print_r(error_get_last());
}
die('Stop.');
}
}
register_shutdown_function(array(new Shutdown(),'stop'));
//此函数会在php程序终止或者die时触发一个函数
$a = new a(); //错误代码
echo "致命错误";
运行图: