Идентичное совпадение (с проверкой типа) в операторе switch Переполнение стека

Просто нашел странную ситуацию, когда нам нужно бежать switch заявления только на одинаковое совпадение (с точным типом). Просто подумайте об этом сценарии:

$value = "";

switch ($value) {
case 0:
echo "Zero";
break;

case 1:
echo "One";
break;

case "":
echo "Empty";
break;

default:
echo "None";
break;
}

Это будет echo «Нуль» где я хочу это echo «Пустой». Можно ли это как-то сделать с switch заявление или у меня есть единственный способ использовать if...elseif...else с === оператор?

4

Решение

Попробуй вот так

$value = "";

switch (true) {
case ($value === 0):
echo "Zero";
break;

case ($value === 1):
echo "One";
break;

case ($value === ""):
echo "Empty";
break;
}

DEMO

4

Другие решения

Оператор переключения PHP задокументировано использовать свободное сравнение. Если вам нужны точные совпадения, то, к сожалению, лучше всего использовать отдельные тесты if / else с ===,

Одной из альтернатив является нечто похожее на

switch(true) {
case $value === 0:
//...
break;
}

но это примерно то же самое, что и серия операторов if-else, с большим количеством операций ввода и отступа.

4

Это можно сделать, вам просто нужно перевернуть то, что вы сравниваете:

switch(true) {
case $value === 0:
echo "Zero";
break;

case $value === 1:
echo "One";
break;

case $value === "":
echo "Empty";
break;

default:
echo "None";
break;
}
0
По вопросам рекламы [email protected]