在PHP中是否有可能防止“致命错误:调用未定义的函数”?

2022-08-30 23:58:58

在PHP中,有没有办法忽略未定义的函数,而不是引发浏览器中可见的致命错误?即致命错误:调用未定义的函数

我知道有将所有自定义函数包装在条件中的做法,如下所示,但是是否有一种编程方法来获得这种效果?

if (function_exists('my_function')) { 

   // use my_function() here;

}

答案 1

不。致命错误是致命的。即使您编写自己的错误处理程序或使用错误抑制运算符,错误仍会导致脚本停止执行。@E_FATAL

处理这个问题的唯一方法是使用function_exists()(可能还有is_callable()作为很好的衡量标准),如上面的示例所示。

围绕潜在(可能?)错误进行防御性编码总是一个更好的主意,而不是让错误发生并在以后处理它。

编辑 - php7 改变了这种行为,未定义的函数/方法是可捕获的异常。


答案 2

在 php 7 中,这现在是可能的。

示例编解码器:

try {
    some_undefined_function_or_method();
} catch (\Error $ex) { // Error is the base class for all internal PHP error exceptions.
    var_dump($ex);
}

演示

http://php.net/manual/en/migration70.incompatible.php

在 PHP 7 中,许多致命和可恢复的致命错误已转换为异常。这些错误异常继承自 Error 类,该类本身实现可抛出接口(所有异常都继承的新基接口)。


推荐