是否可以在PHP中防止"致命错误:调用未定义的函数"?

sup*_*rue 12 php error-handling undefined fatal-error

在PHP中,有什么方法可以忽略未定义的函数而不是抛出在浏览器中可见的致命错误?-ie,致命错误:调用未定义的函数

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

if (function_exists('my_function')) { 

   // use my_function() here;

}
Run Code Online (Sandbox Code Playgroud)

Age*_*rum 31

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

解决这个问题的唯一方法是使用function_exists()(并且可能is_callable()是好的衡量标准),如上例所示.

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

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


goa*_*oat 8

在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);
}
Run Code Online (Sandbox Code Playgroud)

演示

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

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