В PHP if
не имеет собственной области видимости. Так что да, если вы определите что-то внутри оператора if
или внутри блока, то оно будет доступно так же, как если бы вы определили это снаружи (при условии, конечно, что код внутри блока или внутри оператора if
получает работать).
Для иллюстрации:
if (true) { $a = 5; } var_dump($a == 5); // true
Условие оценивается как true
, поэтому код внутри блока запускается. Переменная $a
будет определена.
if (false) { $b = 5; } var_dump(isset($b)); // false
Условие оценивается как false
, поэтому код внутри блока не запускается. Переменная $b
не будет определена.
if ($c = 5) { } var_dump($c == 5); // true
Код внутри условия запускается и $c
определяется как 5
($c = 5
). Даже если присваивание происходит внутри оператора if
, значение остается в силе снаружи, поскольку if
не имеет области видимости. То же самое происходит с for
, как, например, с for ($i = 0, $i < 5; ++$i)
. $i
будет существовать вне цикла for
, поскольку for
также не имеет области действия.
if (false && $d = 5) { } var_dump(isset($d)); // false
false
короткое замыкание и выполнение не достигает $d = 5
, поэтому переменная $d
не будет определена.
Подробнее о области видимости PHP читайте в справочной странице variable scope .