如何从调用的函数中捕获错误?
How to catch error from invoked function?
好的,当我调用 undefined
function
时,catch
和 error
或 exception
有问题
我有一个调用函数的方法,有两个参数(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();
}
好的,当我调用 undefined
function
catch
和 error
或 exception
有问题
我有一个调用函数的方法,有两个参数(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();
}