Область переменных PHP в блоке Try/Catch

в PHP, как правила области переменных применяются к блокам Try/Catch? Переменные объявленные внутри try блок выходит из области действия, когда блок завершен? Или они находятся в области действия до конца функции / метода?

например:

try
{
   // This may throw an exception when created!
   $o = new Pronk();
}
catch (Exception $ex)
{
   // Handle & exit somehow; not important here
   return false;
}

$o->doPronk();

это действительное? Или должен!--2--> быть установлен перед try/catch, чтобы сохранить $o в область?

(Я знаю, что пример кода тут работа, однако я также знаю, что PHP может стать немного глупым когда дело доходит до исследования. Мой вопрос, в идеале, как должны он работает? Как правильно и правильно это сделать?)

3 ответов


ваш код действителен. Переменная в PHP-это функция, а не блок. Таким образом, вы можете назначить переменную внутри try блок и доступ к нему снаружи, пока они находятся в той же функции.


Я считаю, что это мнение в основном основано. Код правильный, и он будет работать так, как ожидалось, пока catch блок всегда имеет return заявление. если catch блок не возвращается, поток будет продолжаться, и код вне блока try / catch будет выполнен, и он потерпит неудачу, потому что $o не будет инициализирован. Вы сможете получить доступ $o из-за отсутствия области блока в php, но метод не будет существовать, потому что не удалось построить объект.


основная концепция обработки исключений заключается в том, что если что-то пойдет не так внутри блока "try", код войдет в блок "catch". так что если

$o = new Pronk();

не вызывает никаких ошибок, он будет в области. нам не нужно объявлять его перед блоком try/catch. ваш код совершенно действителен.