Является ли этот символ звездочки в моем переключателе причиной парадокса в выводе?
В сценарии 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
заявления, используя ===
как оператор сравнения.