Очередная заметка для себя, чтобы не наступить дважды на одни и те же грабли.
var_export('str'==0); // true
Code language: PHP (php)
$status = 0;
switch($status) {
default:
echo 1;
break;
case 'str':
echo 2;
break;
}
Code language: PHP (php)
Возвращает 2, потому что PHP считает, что 0 == ‘str’. Пояснение такой логики в табличке:
https://secure.php.net/manual/ru/types.comparisons.php
Нужно запомнить правило — если мы сравниваем что-то, что может быть как строкой, так и числовым значением, то нужно сначала всё приводить к строке.
$status = 0;
switch((string)$status) {
default:
echo 1;
break;
case 'str':
echo 2;
break;
}
Code language: PHP (php)
Здесь уже возвращает 1.