Область действия переменной 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();

Действительно ли это так? Или следует установить $o = NULL; перед попыткой/уловом, чтобы сохранить $o в области видимости?

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

Author: DOOManiac, 2015-09-09

3 answers

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

 9
Author: Barmar, 2015-09-09 20:19:28

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

 2
Author: taxicala, 2015-09-09 20:19:02

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

$o = new Pronk();

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

 0
Author: Shawon Kanji, 2015-09-09 20:24:02