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方法。
我该怎么办?
谢谢!
答案 0 :(得分:1)
您可以使用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();
}
}
你无法理解它确实存在的事实,因为这是一个致命的错误
答案 1 :(得分:0)
那是不可能的。这是一个致命的错误,也不例外 因此无法抓住它。
在这个实例中,您可以避免导致错误但是:
if (function_exists("sp")) {
return sp('ABC'); // sp is undefined function
}
同样,您可以使用该测试包装$this->makeError();
来电。但这意味着要处理另一种内部方法。无论如何,这只会避免超级特定的边缘情况。
答案 2 :(得分:0)
正如已经回答的那样,这是一个致命的错误:您无法使用自己的错误处理程序,最好的方法是测试该函数是否可用于function_exists。
你也可以使用somme缓冲来做一些技巧,如本SO anwser所述:set_error_handler Isn't Working How I Want It To Work