Проблема в том, что ваш код не делает то, что вы думаете. Блок case
заканчивается только тогда, когда появляется следующий блок case
, или когда найден default:
, или когда достигается закрытие }
. Это означает, что defalut
является частью блока case 2:
. Так что это даже не интерпретируется.
Однако он даже не вызывает синтаксическую ошибку (даже если вы делаете switch (2)
. Это потому, что оператор goto
был введен в PHP 5.3. Синтаксис word:
в начало оператора PHP теперь является целью, доступной через goto
. Таким образом, goto defalut;
может использоваться для перехода к метке.
(На самом деле, он не может из-за ограничения целей внутри блоков switch
, чтобы избежать бесконечных циклов, но это должно проиллюстрировать точку ...)
Вы можете принудительно вызвать ошибку, выполнив case defalut
, когда обнаружена ожидаемая ошибка.