如何捕捉"调用未定义的方法" PHP 7中的错误?

时间:2016-05-24 17:06:09

标签: php error-handling exception-handling try-catch php-7

我使用自己的简单错误处理,实际上可以捕获并记录我需要的所有内容。但是现在我需要抓住try{}catch(){}的错误。我希望有时在那个地方发生的错误是"调用未定义的方法"错误。我可以这样抓住它:

try {
    $someObject->someMethodTheObjectDoesntProvide();
} catch (Error $e) {
    // do something else
}

但是Error子句中的catch类有点泛泛。我只想抓住这种类型的错误。

有没有办法将捕获限制在特定的"类型"错误?

不使用strpos($errorMessage) ...;)

2 个答案:

答案 0 :(得分:5)

如果方法不存在,可以使用类中的magic __call()方法抛出自定义异常

class myCustomException extends Exception {
}

class someClass {
    public function __call($name, $arguments) {
        if (!method_exists($this, $name)) {
            throw new myCustomException($name . ' has shuffled the mortal coil');
        }
    }
}


$someObject = new someClass();
try {
    $someObject->someMethodTheObjectDoesntProvide();
} catch (myCustomException $e) {
    echo $e->getMessage();
}

Demo

答案 1 :(得分:1)

我知道我已经超过18个月太晚但是你考虑过做@Mark Baker提出的建议,而是抛出一个BadMethodCallException