переключение состояния происходит в первом случае на int 0 - PullRequest
0 голосов
/ 02 мая 2018

У меня есть код примерно такой:

function someFunction($myKey){
  switch($myKey){
     case 'equals':
       $condition = '=';
       break;
     case 'notequals':
       $condition = '!=';
       break;
     default:
        $condition = 'like';
        break;
  }
  return $condition;
}
echo someFunction(1);        // output 'like' good 
echo someFunction('equals'); // output '=' also good 
echo someFunction(0);        // but here output '=' why ?
echo someFunction(true);     // and here also '=' why ?

Как я уже прокомментировал, почему 0 и true переходят на первый случай вместо значения по умолчанию?

Хотя я исправляю это просто приведение $myKey к строке перед условием переключения но мне любопытно, что я здесь не так сделал.

1 Ответ

0 голосов
/ 02 мая 2018

На странице PHP switch видно, что она использует Loose Comparison .

  • Сравнение с целым числом 0 приводит строку equals к целому числу 0
  • Сравнение с логическим значением true приводит строку equals к логическому значению true

Поскольку вы сравниваете строки, приведите аргумент к строке с (string) или strval():

function someFunction($myKey){
    switch((string)$myKey){
     case 'equals':
       $condition = '=';
       break;
     case 'notequals':
       $condition = '!=';
       break;
     default:
        $condition = 'like';
        break;
  }
  return $condition;
}
...