̃Gg[͂ĂȃubN}[Nɒlj

PHP :: switch の case 文で厳密な型比較をする



switch の case 文の比較は型を考慮しません。
比較演算子 == と同様の挙動です。


下記サンプルコードをご覧ください。

<?php
 
function hoge($v)
{
    switch ($v) {
        case '1': // 文字列の1
            $ret = 'string: 1';
            break;
 
        case 1: // 数値の1
            $ret = 'integer: 1';
            break;
    }
 
    return $ret;
}
 
$v = 1;
var_dump(hoge($v));
 
$v = '1';
var_dump(hoge($v));

結果

string(9) "string: 1"
string(9) "string: 1"
  • どちらも文字列の 1 として扱われます。



以下のように書くことで、switch の case 文でも厳密な型比較をすることが可能です。

  • switch の引数を true にするのが肝です。
<?php
 
function hoge($v)
{
    switch (true) {
        case $v === '1':
            $ret = 'string: 1';
            break;
 
        case $v === 1:
            $ret = 'integer: 1';
            break;
 
        case is_array($v):
            $ret = 'array';
            break;
 
        default:
            $ret = 'default';
    }
 
    return $ret;
}
 
var_dump(hoge('1'));
var_dump(hoge(1));
var_dump(hoge(array()));
var_dump(hoge(false));

結果

string(9) "string: 1"
string(10) "integer: 1"
string(5) "array"
string(7) "default"









programming/php/etc/strict_switch_case.txt