RYO.dev

最終更新日:

switch文の比較、JavaScriptは===、PHPは==

  1. JavaScriptのswitch文
  2. PHPのswitch文
  3. まとめ
  4. PHPでも厳密に比較したい
  5. 最後に

JavaScriptのswitch文

JavaScriptでは、式の値とcase節を厳密等価演算子(===)を使って比較します(ソース)。コードで確かめてみましょう。

function compareSwitch(num) {
  switch(num) {
    case 5:
      console.log('数値の5');
      break;
    default:
      console.log('該当なし');
      break;
  }

  switch(num) {
    case '5':
      console.log('文字列の5');
      break;
    default:
      console.log('該当なし');
      break;
  }
}

compareSwitch関数の引数に数値の5を指定して呼び出す、すなわちcompareSwitch(5)を呼び出したときの結果は次のようになります。

数値の5
該当なし

compareSwitch関数の引数に文字列の5を指定して呼び出す、すなわちcompareSwitch('5')を呼び出したときの結果は次のようになります。

該当なし
文字列の5

この結果から、JavaScriptでは確かに厳密等価演算子(===)を使って式の値(ここではnum)とcase節を比較していることが分かりますね。

PHPのswitch文

PHPでは、式の値とcase節を等価演算子(==)を使って比較します(ソース)。コードで確かめてみましょう。

function compareSwitch($num) {
  switch($num) {
    case 5:
      echo '数値の5';
      break;
    default:
      echo '該当なし';
      break;
  }

  switch($num) {
    case '5':
      echo '文字列の5';
      break;
    default:
      echo '該当なし';
      break;
  }
}

compareSwitch関数の引数に数値の5を指定して呼び出す、すなわちcompareSwitch(5)を呼び出したときの結果は次のようになります。

数値の5
文字列の5

compareSwitch関数の引数に文字列の5を指定して呼び出す、すなわちcompareSwitch('5')を呼び出したときの結果は次のようになります。

数値の5
文字列の5

この結果から、PHPでは確かに等価演算子(==)を使って式の値(ここでは$num)とcase節を比較していることが分かりますね。

まとめ

switch文

JS
===

PHP
==

PHPでも厳密に比較したい

次のようなコードを書くことで、compareSwitch(5)compareSwitch('5')を呼び出したときの結果はJSの時と同じになります。

function compareSwitch($num) {
  switch(true) {
    case $num === 5:
      echo '数値の5';
      break;
    default:
      echo '該当なし';
      break;
  }

  switch(true) {
    case $num === '5':
      echo '文字列の5';
      break;
    default:
      echo '該当なし';
      break;
  }
}

最後に

誤った情報を見つけたりお聞きしたいことがございましたら、TwitterのDMメールまでご連絡ください。