问题背景:
下面这段代码在PHP5中工作OK,但是升级到PHP7后,报题示错误。
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 参数前的类型约束。
解决方案:
//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) { ... }