2016-10-24 3 views
0

Я бегу следующий код:PHP Try/Поймать выполнение блока остановки код

try { 

     $count = $user[0]->followers_count; 

    } catch (Exception $e) { 

     return 'error'; 
    } 

    dd('continuing execution'); 

, который выводит это:

FatalErrorException в Twitter.php линии 174: Невозможно использовать объект типа StdClass как массив

Теперь цитата из https://stackoverflow.com/a/13955721/2724978

Прежде всего, следует четко указать, что исключение является только фатальным, если он не пойман. Захват исключения не останавливает выполнение сценария .

Мой код не продолжает выполнение, даже если оно находится в блоке try/catch. Я почти уверен, что я что-то упустил, что это?

+1

Вы возвращаетесь в catch, который остановит сценарий. – nerdlyist

+1

Я должен предположить, что '$ user' является объектом, а не массивом, поэтому попробуйте' $ count = $ user-> followers_count; ' – RiggsFolly

+0

он выдаст 'error' тогда .. Я прокомментировал эту строку, все тот же вывод. – raphadko

ответ

0

Ну, ответ, который я нашел, заключается в том, что в PHP ошибки и исключения - это разные вещи. Исключения могут быть пойманы, а код не остановится. С другой стороны, такие ошибки, как FatalErrorException, всегда будут останавливать приложение, даже если оно находится в блоке try/catch.

Ни в коем случае не нужно писать код для проверки типов переменных.

Также, другая вещь .. Иногда (например, в laravel) вы должны использовать \ Exception вместо Exception.

+0

Посмотрите на примере на этой странице: http://php.net/manual/en/language.exceptions.php О \ Exception, необходимом в некоторых файлах, это те случаи, когда ваш код объявлял другое пространство имен (использование ключевого слова), например: http://php.net/manual/en/language.namespaces.importing.php Если пространство имен не было объявлено, 't нужны конечные \ перед именами встроенных классов. –

Смежные вопросы