【原创】解决PHP报错: PHP Fatal error: Uncaught TypeError: Argument 1 passed to QDB_Adapter_Mysql::exceptionHandler() must be an instance of Exception, instance of Error given

blogdaren 2019-03-05 抢沙发 805人次

问题背景:

下面这段代码在PHP5中工作OK,但是升级到PHP7后,报题示错误。

<?php
class QDB_Adapter_Mysql extends QDB_Adapter_Abstract
{
    public function __construct($dsn, $id)
    {
        set_exception_handler(array($this, 'exceptionHandler'));
    }

   
    public function exceptionHandler(Exception $ex)
    {   
        //......
    }  
}

问题原因:

自 PHP 7 以来,大多数错误抛出 Error 异常,如果在用户回调里将 $ex 参数的类型明确约束为Exception, PHP 7 中由于异常类型的变化,将会产生问题,所以最好的兼容方案就是:移除 $ex 参数前的类型约束。

解决方案:

<?php
//register exceptoin handler
set_exception_handler('handler');

// PHP 5 work only
function handler(Exception $e) { ... }

// PHP 7 work only
function handler(Throwable $e) { ... }

// PHP 5 and 7 compatible.
function handler($e) { ... }

发表评论:

您的昵称:
电子邮件:
个人主页: