Является ли этот символ звездочки в моем переключателе причиной парадокса в выводе?

В сценарии PHP у меня есть этот код:

 $route = new Route($url);
 var_dump($route->getRouteIDs());

 echo "<br/>";
 $isValid = $route->isValid($url);
 var_dump($isValid);

 echo "<br/>";
 switch($isValid) {
     case '*':
         echo "wildcard route";
         break;
     case true:
         echo "real route";
         break;
     case false:
         echo "false route";
         break;
 }

Это вывод:

array (1) {[0] => string (2) "21"}

BOOL (истина)

маршрутный знак

На выходе строки 1 и 2 соответствуют ожиданиям. Но мне кажется, что результаты строк 2 и 3 противоречат друг другу.

Почему переключатель активируется для символа звездочки (*), когда var_dump говорит, что переменная $isValid содержит только логическое значение 'true'?

1 ответ

switch выполняет произвольные сравнения. В этом случае, true сравнивается равным любому истинному значению. Вы можете увидеть это с помощью этого простого теста:

if ('*' == true) {
    echo "Wildcard route";
}

Если вы хотите строгое сравнение, вам придется выписать if/then/elseif заявления, используя === как оператор сравнения.

Другие вопросы по тегам