如何在__call中模拟不存在的方法错误?

Ter*_*ion 27 php

也许奇怪的问题,但是...我有一个神奇的__call方法,它返回某些类的实例,或者,如果没有这样的类,则在底层对象中调用相同的方法.

public function __call($name, $arguments)
{
    $class = 'My\\Namespace\\' . $name;

    if (class_exists($class, true)) {

        $reflect = new \ReflectionClass($class);
        return $reflect->newInstanceArgs($arguments);

    } elseif (is_callable([$this->connector, $name])) {

        return call_user_func_array([&$this->connector, $name], $arguments);
    } else {
        // ????
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在else阻止怎么办?我可以模拟未定义的方法错误吗?或抛出什么异常是正确的?

hai*_*770 24

您可以使用trigger_error以下方法手动触发PHP错误

trigger_error('Call to undefined method '.__CLASS__.'::'.$name.'()', E_USER_ERROR);
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/function.trigger-error.php

  • 这将显示一条有用的错误消息,但是 `is_callable($myclass, 'forbitten_method')` 仍然会为 forbitten 方法返回 true (2认同)