Я понятия не имею, почему вы ожидаете, что на выходе будет bc
, когда вы четко установили $a
на true
. Вы сравниваете true == true
, что, очевидно, будет положительным сравнением.
Что за оператор switch
принимает значение, а затем сравнивает его со значениями, заданными операторами case
. Вход для обоих может быть выражением. Как только сравнение будет положительным, код выполняется до тех пор, пока не встретится break
или не будет достигнут конец оператора switch
.
Итак, чтобы сломать ваш код:
$a = true;
switch(true) {
case ($a): // $a == true, which is the case so we start to execute
echo 'a';
case (isset($b)): // isset($b) == true, which is not the case, but we still continue because of the lack of a break;
echo 'b';
default: echo 'c'; // again, we get here because there is no break;
}