如何捕获PHP 7中的“调用未定义的方法”错误?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何捕获PHP 7中的“调用未定义的方法”错误?相关的知识,希望对你有一定的参考价值。

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

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

Error条款中的catch类有点泛泛。我只想抓住这种类型的错误。

有没有办法将捕获限制为特定的“类型”错误?

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

答案

如果方法不存在,可以使用类中的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

另一答案

我知道我已经超过18个月太晚但是你考虑过做什么@Mark Baker建议但是扔了一个BadMethodCallException

以上是关于如何捕获PHP 7中的“调用未定义的方法”错误?的主要内容,如果未能解决你的问题,请参考以下文章

JSONP 不适用于 ExtJS 4 - 未捕获的类型错误:无法调用未定义的方法“子字符串”

致命错误:未捕获的错误:调用未定义的方法 stdClass::option();

致命错误:未捕获的错误:调用未定义的方法 Connection::prepare() [重复]

fullCalendar - 未捕获的类型错误:无法调用未定义的方法“拆分”

chrome.tabs.create 给出错误 - “未捕获的类型错误:无法调用未定义的方法‘create’”

Woocommerce 出现致命错误:未捕获的错误:调用未定义的方法 WooCommerce::get_image_size()