PHP
JavaScript

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


同じswitch文を使って出力結果の違いを比較しよう

下はJSのコードですが、PHPで考える場合は読み替えてください。すなわち、num$numconsole.log(~)echo ~と読み替えてください。


JavaScriptとPHP

// A

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

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



結果

155081659966.jpg


なぜこうなるのか

式を比較するときに、JavaScriptは厳密等価演算子(===)を使った厳密な比較を行い、PHPは等価演算子(==)を使った緩やかな比較を行うから。


JavaScriptのソース


switch文はまず始めに式を評価します。次に (厳密等価演算子===を使用して) 式が入力式の結果と評価される値が等しい最初の case 節を探し、…

 

switch - JavaScript | MDN



PHPのソース


switch/case が行うのは、 緩やかな比較 であることに注意しましょう。

PHP: switch - Manual



PHPでも厳密に比較したい


PHP

// A

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

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


このように書くと厳密な比較になります。結果は以下の通り。なお、「JavaScript」と「PHP」の結果は、同じswitch文を使って出力結果の違いを比較しようのところで紹介しかコードを使ったときの結果で、「PHP(厳密)」はここで紹介したコードを使ったときの結果です。

155081659966.jpg