php 继承 exception,PHP异常处理

简单的异常捕获

namespace Home\Controller;

class TestController{

function a(){

try{

throw new \Exception('异常');

}catch (\Exception $exception){

echo $exception->getMessage(); #异常

}

}

}

如果类中有20个方法,每个都try_catch?

可以写个基类,在基类的构造函数里注册一个异常处理函数,其他的类继承这个基类

namespace Home\Controller;

class MyController{

public function __construct () {

//set_exception_handler() 接收一个callable

set_exception_handler(

function (\Throwable $exception){

echo $exception->getMessage();

}

);

}

}

继承基类,所有的异常都会抛出给基类,基类可以做统一处理.

namespace Home\Controller;

class TestController extends MyController {

function a(){

throw new \Exception('异常aaa');#异常aaa

}

function b(){

throw new \Exception('异常bbb');#异常bbb

}

function c(){

throw new \mysqli_sql_exception('数据库异常'); #数据库异常

}

function d(){

set_time_limit(1);

while(true){}

}

function e(){

ini_set('memory_limit','10M');

while (true){

$data[] = 1;

}

}

}

注意最后两个方法

function d()报错超时

function e()报错内存溢出

并不能被基类捕获

可以注册一个register_shutdown_function(),该方法在脚本结束时执行.

#index.php 入口文件

register_shutdown_function(

function (){

$error = error_get_last();

if ($error){

dump($error);

}

}

);

要注意的是,这个函数可以出现多次,并按注册先后顺序执行,前边的执行了exit(); 后续的将不会执行.有的框架如tp3.2.3已经注册了此方法,并且他内部执行了exit(); 想让自己的方法执行,应该早于框架注册, 可以放在index.php文件中,这样便能处理超时和内存溢出错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值