忽略错误并继续处理


PHP Ignore error and keep processing

class MyClass {
    public function __construct(){
    }
    private function makeError(){
        return sp('ABC'); // sp is undefined function
    }
    private function printMe(){
        echo "PRINT ME";
    }
    public function run(){
        try {
            $t = $this->makeError();
        }catch(Exception $e){
        }
        $this->printMe();       
    }
}
$t = new MyClass();
$t->run();

如果运行上面的代码,会出现错误,因为sp()不是定义函数。

但是我想忽略这个错误并运行printMe方法。

我该怎么办?

谢谢!

可以使用function_exist()

class MyClass {
    public function __construct(){
    }
    private function makeError(){
        if(!function_exist('sp')){
             throw new Exception();
        }else{
             return sp('ABC'); // sp is undefined function
        }
    }
    private function printMe(){
        echo "PRINT ME";
    }
    public function run(){
        try {
            $t = $this->makeError();
        }catch(Exception $e){
        }
        $this->printMe();       
    }
}

你无法捕捉到它不存在的事实因为这是一个致命错误

那不可能。这是一个致命错误,不是异常。
因此,它不能被捕获。

在这个例子中,你可以使用避免导致错误,但是使用:

if (function_exists("sp")) {
     return sp('ABC'); // sp is undefined function
}
同样地,您可以用该测试封装$this->makeError();调用。但这意味着要在内部处理另一个方法。总之,这可以避免极端情况

正如已经回答的那样,这是一个致命的错误:您不能使用自己的错误处理程序,最好是通过function_exists测试函数是否可用。

你也可以使用一些缓冲来做一些技巧,就像在这个答案中解释的那样:set_error_handler Isn't Working How I Want It Work