[PHP]switch()は通常では厳密に型を比較しない

Pocket

プログラミングである変数の値によって処理を分岐する際、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:




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です