PHP игнорирует ошибки и продолжает обработку - PullRequest
0 голосов
/ 13 декабря 2011
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.

Как мне быть?

Спасибо!

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

Вы можете использовать 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();       
    }
}

, вы не можете уловить тот факт, что он не существует, потому что это фатальная ошибка

0 голосов
/ 13 декабря 2011

Как уже было сказано, это фатальная ошибка: вы не можете использовать свой собственный обработчик ошибок, лучше всего проверить, доступна ли функция с function_exists .

Youможет также быть в состоянии использовать буферизацию SOMME для выполнения некоторых трюков, как описано в этом SO anwser: set_error_handler не работает, как я хочу, чтобы он работал

0 голосов
/ 13 декабря 2011

Это невозможно.Это фатальная ошибка, а не исключение.
Поэтому ее невозможно перехватить.

В этом самом случае вы можете отказаться от ошибки , однако с:

if (function_exists("sp")) {
     return sp('ABC'); // sp is undefined function
}

Точно так же вы можете обернуть свой $this->makeError(); вызов этим тестом.Но это будет означать обработку других методов interna.И в любом случае, это просто позволило бы избежать этого супер специфического крайнего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...