class MyClass {
public function __construct(){
}
private function makeError(){
return sp('ABC'); // sp is undefined function
}
private function printMe(){
echo "PRINT ME";
}
public function run(){
try {
$t = $this->makeError();
}catch(Exception $e){
}
$this->printMe();
}
}
$t = new MyClass();
$t->run();
如果运行上面的代码,会出现错误,因为sp()不是定义函数。
但是我想忽略这个错误并运行printMe方法。
我该怎么办?
谢谢!
可以使用function_exist()
class MyClass {
public function __construct(){
}
private function makeError(){
if(!function_exist('sp')){
throw new Exception();
}else{
return sp('ABC'); // sp is undefined function
}
}
private function printMe(){
echo "PRINT ME";
}
public function run(){
try {
$t = $this->makeError();
}catch(Exception $e){
}
$this->printMe();
}
}
你无法捕捉到它不存在的事实因为这是一个致命错误
那不可能。这是一个致命错误,不是异常。
因此,它不能被捕获。
在这个例子中,你可以使用避免导致错误,但是使用:
if (function_exists("sp")) {
return sp('ABC'); // sp is undefined function
}
同样地,您可以用该测试封装$this->makeError();
调用。但这意味着要在内部处理另一个方法。总之,这可以避免极端情况
正如已经回答的那样,这是一个致命的错误:您不能使用自己的错误处理程序,最好是通过function_exists测试函数是否可用。
你也可以使用一些缓冲来做一些技巧,就像在这个答案中解释的那样:set_error_handler Isn't Working How I Want It Work