PHP忽略错误并继续处理

时间:2011-12-13 16:58:26

标签: php exception error-handling

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方法。

我该怎么办?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用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();       
    }
}

你无法理解它确实存在的事实,因为这是一个致命的错误

答案 1 :(得分:0)

那是不可能的。这是一个致命的错误,也不例外 因此无法抓住它。

在这个实例中,您可以避免导致错误但是:

if (function_exists("sp")) {
     return sp('ABC'); // sp is undefined function
}

同样,您可以使用该测试包装$this->makeError();来电。但这意味着要处理另一种内部方法。无论如何,这只会避免超级特定的边缘情况。

答案 2 :(得分:0)

正如已经回答的那样,这是一个致命的错误:您无法使用自己的错误处理程序,最好的方法是测试该函数是否可用于function_exists

你也可以使用somme缓冲来做一些技巧,如本SO anwser所述:set_error_handler Isn't Working How I Want It To Work