В PHP, как переменный объем обрабатывается в операторах переключения?
Например, возьмите этот гипотетический пример:
$someVariable = 0;
switch($something) {
case 1:
$someVariable = 1;
break;
case 2:
$someVariable = 2;
break;
}
echo $someVariable;
Это распечатало бы 0 или 1/2?
Переменная будет одинаковой во всей части кода: в PHP нет области действия переменной «на блок».
Итак, если $ something
равно 1
или 2
, вы вводите один из случаев
из switch
, ваш код выдаст 1 или 2.
С другой стороны, если $ something
не равно 1
или 2
(например, , если он рассматривается как 0
, как в случае с опубликованным вами кодом, поскольку он ничем не инициализирован) , вы не войдете ни в один из блоков case
; и код выведет 0
.
PHP имеет только глобальную область видимости и область видимости функции/метода. Поэтому $someVariable
внутри блока switch
ссылается на ту же переменную, что и снаружи.
Но поскольку $something
не определена (по крайней мере, в приведенном вами коде), обращение к ней вызывает уведомление Undefined variable, ни один из случаев не подходит (неопределенные переменные равны null
), $someVariable
останется без изменений, а 0
будет выведен.
Будет выведено 1 или 2. Переменные в PHP охватывают всю функцию.
Будет выведено 1 или 2, если вы измените значение $ someVariable
в инструкции switch, и 0, если вы этого не сделаете. .