第9章 条件で処理を変える
9.6 特殊な条件の判定方法について知っておこう
PHPの条件分岐文では他のプログラミング言語とは違った、独特の判定を行う場合があります。その判定の仕組みを知っておかないと望まない結果になり、意図しない動作になってしまい困ることになりますので本節でその判定方法について学習していきましょう。
9.6.1 違う値が等しいと判断される
これまでの学習で、「ある値とある値が等しい」かを比較演算子の「==」を使って判定を行ってきましたが、PHPでは全く違う値同士でも「==」を使って判定を行うと等しいと判断する場合があります。「==」で等しくなる値の一覧を表9.6.1に示します。
表 9.6.1:等しい値と判定される値の一覧
例えば「==」を使って、変数の値が空っぽ(“”)を判定した時に、変数に数値「0」が代入されているのにも関わらず空っぽと判断されてしまいます。本来ならば数値の「0」が入っているので空っぽではないはずです。そのような場合には比較演算子「===」を使うと、正しくデータの違い(中の値とデータの型の観点から判定する)を判定してくれるようになります。
説明だけでは分かりにくいと思いますので、まずはプログラムで演算子の動作の違いを確認してみましょう。
比較演算子の「==」と「===」の違いを確認するプログラム
変数に格納された数値0と空文字「””」を、比較演算子の「==」と「===」を使って同じ比較を行い、その動作結果の違いをWebブラウザにメッセージを表示して確認してみましょう。
ソース・フォルダー: myproj_intro/ch09
パッケージ: compareValue.php
アクセスURL:http://localhost/myproj_intro/ch09/compareValue.php
compareValue.php
解説
今回のプログラムのポイント10、17行目で、「$num=0」と「””」が等しいかどうかを、比較演算子の「==」と「===」を変えて行っているところです。
実行結果を見ると分かると思いますが、「0 == “”」で比較した結果は画面に「変数の中身は空っぽです。」と表示され「0と””が等しい」と判断されているのが分かります。逆に「0 === “”」で比較した場合は、「変数の中身は「0」です。」と表示され「0と””が等しくない」と判断されているのも確認できます。
基本的に同じ値であるかを比較する場合「==」を使って行っても殆ど問題ありません。表9.6.1で示した、値同士をきちんと区別して比較したい場合には「===」を使うようにしてください。
ポイント
- 「==」を使って同じ値かどうか判定すると、違う値にも関わらず同じと判断される値がある。
- 「===」を使うとデータの違いをきちんと判定してくれる。
9.6.2 条件式で値だけで判断する
これまでの条件分岐文は、比較演算子を必ず使ってある値と別の値を比較してきました。PHPの条件分岐文では必ず比較演算子を使った条件式ではなく、「値だけで判断」することもできます。
復習になりますが、条件分岐文の仕組みは条件式を判定した結果の「真偽値(true/false)」で、処理を行うかを判断しています。
条件式の判定結果の真偽値で処理を判断条件式には「$a==10」、「$x>$y」などを記述します。
本項の始めに条件分岐文は「値だけで判断」できると説明しましたが、普通の値(5、”文字列”等)を判定するような場合は意味がありません。基本的な使い方として、プログラムの中で色々な処理を行った後の結果データや、フォームからの入力データ等が格納されている「変数の値」を判定する場合になります。
書式:変数の値を条件として判定
変数の値で判定した場合、表9.6.2で示す値ならelseブロック、それ以外の全ての値がifブロックになります。
表 9.6.2:偽(false)と判定される値
※表9.6.1とほぼ同じですが、「”0.0″または’0.0’」はtrueと判定されるので、間違えずに覚えておいて下さい。
変数の値を条件判定に使ったプログラム
変数に格納された値を条件判定に利用し、値の違いで判定結果が変わることをWebブラウザにメッセージを表示して確認してみましょう。
ソース・フォルダー: myproj_intro/ch09
パッケージ: ifStatement4.php
アクセスURL:http://localhost/myproj_intro/ch09/ifStatement4.php
ifStatement4.php
解説
今回のプログラムは変数の値を条件判定に利用して、判定した時の値でifとelseのどちらのブロックになるかを確認しています。
条件判定に使う条件分岐文は2回とも同じ処理になっています。
1回目の判定時には、変数$varの値「15」は「ifブロックの処理」が実行され、2回目の判定時には、変数$varの値「’0’」は「elseブロック」の処理が実行されているのが確認できます。
今回の実行結果から、数値の15は「true判定」、表9.6.2で示した値の’0’が「false判定」されているのが正しく確認できました。
今回のプログラムで利用した値以外でも色々試してみて、結果がどうなるか確認してみてください。
ポイント
- 条件判定に変数の値を利用することができる。
- 値を条件判定すると、false判定される値は決まっていて、それ以外の値の場合にtrue判定になる。