如何从调用的函数中捕获错误?

How to catch error from invoked function?

好的,当我调用 undefined function

时,catcherrorexception 有问题

我有一个调用函数的方法,有两个参数(bool, function)

private function invoking($hdr = true, $fnc) {
   if(is_callable($fnc)) {
      if($hdr) {
         $this->load_header();
      }

      try {
        $fnc->__invoke();
      } catch(Exception $er) {
        echo "Something went wrong. ".$er;
      }
   } else {
       echo "function not callable";
   }
}

但是,我无法捕获 $fnc 中的错误。

$this->invoking(true, function() {
   undefinedfunction();
   // for example i called this, which the function doesnt exist
});

但似乎 catch 对我内部的内容不起作用 __invoke(),我应该怎么做才能捕获 invoked 函数内部的错误?

感谢任何建议

您正在执行未定义的函数,然后再传递它 你需要做的是:

$this->invoking(true,'undefinedfunction');

那么 __invoke 将无法处理字符串,因此您需要使用

call_user_func($fnc);

相反。

要调用具有参数的函数,将参数作为数组传递给您的函数,然后 call_user_func_array

private function invoking($hdr = true, $fnc, $args=Array())
...
call_user_func_array($fnc, $args);
...
$this->invoking(true,'print_r', Array("Hi there It Works"));

因此您的最终代码将是:

private function invoking($hdr = true, $fnc, $args=Array()) {
   if(is_callable($fnc)) {
      if($hdr) {
         $this->load_header();
      }

      try {
        call_user_func_array($fnc, $args);
      } catch(Exception $er) {
        echo "Something went wrong. ".$er;
      }
   } else {
       echo "function not callable";
   }
}

测试:

$this->invoking(true,'undefinedfunction');
$this->invoking(true,'print_r', Array("Hi there It Works"));</pre>

But seems like the catch doesnt not work to what inside i __invoke()

它不起作用,因为它抛出 Fatal error,无法使用 Exception class 处理。在 PHP 7 之前,几乎不可能发现此类错误。

在PHP 7 :

Most errors are now reported by throwing Error exceptions

阅读更多关于Errors in PHP 7

所以如果你的 php 版本是 >= PHP 7 你可以简单地这样做

  try {
    $fnc->__invoke();
  } catch(Error $er) { // Error is the base class for all internal PHP errors
    echo $er->getMessage();
  }