プログラミングである変数の値によって処理を分岐する際、switch() を使うのは珍しいことではありませんが、PHP で switch() を使うには注意が必要です。
というのも、PHPでの比較は「===」ではなく「==」による緩やかな比較であるため、それを考慮していないと狙いと違う動作をすることになります。
次のサンプルは文字列型の変数 $sample を空文字で初期化し、switch() で処理を分けています。
型を区別していれば「Blank」の文字が出力されるのですが実際には「null」が出力されます。
<?php $sample = ''; switch($sample){ case null: echo 'null'; break; case 0: echo '0'; break; case '': echo 'Blank'; break; default: echo 'Default'; break; }
もし型を厳密に比較するのであれば if による分岐を使うか、次のようにします。
<?php $sample = ''; switch(true){ case $sample === null: echo 'null'; break; case $sample === 0: echo '0'; break; case $sample === '': echo 'Blank'; break; default: echo 'Default'; break; }
狙った動作が実現できるとはいえ本流から外れた使い方なので、そもそも厳密な型比較が必要なケースで switch() を使うこと自体正しくないのかもしれません。
参考サイト: http://php.net/manual/ja/control-structures.switch.php
Similar Posts:
- [PHP]HSV(HSB)をRGBに変換する
- [PHP]JSON+cURLで時刻同期型ワンタイムパスワードによる認証
- [PHP]Fatal Error発生時にログを作成する
- [PHP]多次元配列の次元の深さ(階層)を調べる
- [PHP]数字に序数詞をつけて 1st, 2nd 3rd のように出力する
- [PHP]PDOを使ったMySQLデータベースへの接続と基本操作
- [PHP]逆ポーランド記法への変換と計算
- PHP で XML の内容を取得する(DOM, XPath)