A switch
оператор делает слабое сравнение между проверенным выражением и выражениями в case
метках типа.
В этом случае это означает, что компилятор определяет, если true == 2
. Поскольку любое отличное от нуля целое число сравнивается равным true
, ветвь берется и выполняется echo 1;
.
Вот менее интуитивный пример, когда действует точно такой же механизм. Вы можете объяснить это с помощью той же логики:
$foo = 'hello';
switch($foo) {
case 'A' || 'B':
echo "Test succeeded";
}
Я использовал этот пример в прошлом при обучении новичков PHP, чтобы они могли понять, как работает свободно типизированный язык.