Область действия переменной 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 может быть немного глупым, когда дело доходит до определения области. Мой вопрос в том, как в идеале должно это работать? Как правильно и правильно это сделать?)
3 answers
Ваш код действителен. Область действия переменной в PHP определяется функцией, а не блоком. Таким образом, вы можете назначить переменную внутри блока try
и получить к ней доступ снаружи, если они находятся в одной и той же функции.
Я считаю, что это в основном мнение, основанное на мнении. Код верен, и он будет работать так, как ожидалось, пока в блоке catch
всегда есть оператор return
. если блок catch
не вернется, поток продолжится, и код за пределами блока try/catch будет выполнен, и он завершится неудачно, потому что $o
не будет инициализирован. Вы сможете получить доступ к $o
из-за отсутствия области действия блока в php, но метод не будет существовать, потому что не удалось построить объект.
Основная концепция обработки исключений заключается в том, что если что-то пойдет не так внутри блока "попробовать", код войдет в блок "поймать". так что если
$o = new Pronk();
Не вызывает никаких ошибок, которые будут в области видимости. нам не нужно объявлять об этом перед блокировкой try/catch. ваш код абсолютно верен.