2つの値(式の結果・数値・文字列)を比べて条件と一致するかしないかで処理を分ける事ができます。
if命令とswitch命令があります。
条件と一致するかしないかで二択に処理を分けれます。複数つなげることで複雑に処理を分ける事ができます。
判定には「=」「!」「<」「>」を組み合わせた文字列「比較演算子」を使い左辺と右辺を比較します。(真の判定では比較演算子を使わない場合もあります)
後述するswitchと比べると比較演算子が使えるので複雑な分岐が可能ですが、1回の命令で2つしか分岐できないため比較演算子を使わない複数の分岐の場合はswitchの方が処理が高速です。
例:下記の例ではテストの点数($point)により合格は追試かを表示する例です
<?php $point=31; //テストの点数を入力 if ( $point > 30 ){ echo '<p>30点越えは合格</p>'; }else{ echo '<p>30点以下は追試</p>'; } ?>
使用できる比較演算子は下記の9種類
演算子 | 説明 |
---|---|
== | 左辺と右辺が等しい(型は自動変換) |
=== | 左辺と右辺が等しく型も同じ |
!= | 左辺と右辺が等しくない(型は自動変換) |
!== | 左辺と右辺が等しくない・または型も違う |
<> | 左辺と右辺が等しくない(数値) |
> | 左辺が大きい(右辺が小さい) |
>= | 左辺が大きいか両辺が等しい(右辺が小さい) |
< | 左辺が小さい(右辺が大きい) |
<= | 左辺が小さいか両辺が等しい(右辺が大きい) |
「==」と「!=」は左辺と右辺の型が違う場合は自動的に合わせて比較評価しますが、バグ元になるので使わない方が良いです。
1.「if」、条件が一致した時は1→2→3と処理が進み、一致しない場合は1→3と処理が進みます。2の部分でもifは使えます
//(1) if( 条件 ){ //(2)条件が一致したら処理する } //(3)
2.「if else」、条件が一致した時は1→2→4と処理が進み、一致しない時は1→3→4と処理が進みます
//(1) if( 条件 ){ //(2)条件が一致したら処理する } else{ //(3)条件が一致したら処理する } //(4)
3.「if else if」2回の条件判定があります。条件aが一致すれば1→2→4(条件bは判定しない)、条件aが不一致なら条件bを判定して一致すれば1→3→4、不一致なら1→4と処理が進みます。これに続けてさらにelse if をつなげれば細かく分岐できます。
//(1) if( 条件a ){ //(2)条件が一致したら処理する } else if ( 条件b ){ //(3)条件が一致したら処理する } //(4)
else ifを使わなくても次のように掛けますがelse if が増えれば増えるほと入れ子(ネスト)が増えるのでプログラムソースが見難くなります。ただしif(条件b)の前後に別の処理を入れる場合はこの方法しかありません。
//(1) if( 条件a ){ //(2)条件が一致したら処理する }else{ if( 条件b ){ //(3)条件が一致したら処理する } } //(4)
4.「if else if else」2回の条件判定があります。条件aが一致すれば1→2→5(条件bは判定しない)、条件aが不一致なら条件bを判定して一致すれば1→3→5、不一致なら1→4→5と処理が進みます。
//(1) if( 条件a ){ //(2)条件が一致したら処理する } else if ( 条件b ){ //(3)条件が一致したら処理する } else{ //(4) } //(5)
switchは比較元の値と一致する場合に複数の分岐ができます。
比較には==演算子が使用されるため、型に注意が必要です。
ifと比べると1回の命令で複数に分岐できるためifを多用するよりも高速ですが、比較演算子が使えないため複雑な条件での分岐はできません。
例:アクセスカウンターなどに設置して1回目・50回目・100回目で特別なメッセージを流し、その他は「いらっしゃいませ」と表示する例です。
<?php $count=1; //何回目アクセスしたか格納する(ここでは手動で入力) switch($count){ case 1: echo '<p>はじめてのアクセスですね、これからよろしく。</p>'; break; case 50: echo '<p>50回目のアクセスです。</p>'; break; case 100: echo '<p>100回目のアクセスです。ありがとうございます</p>'; break; default: echo 'いらっしゃいませ'; ?>
1.値aが比較値1と一致する場合は1→2→4、比較値2と一致する場合は1→3→4、一致しない場合は1→4と処理します。
//(1) switch(比較元の値や式){ case 比較値1: //(2) break; case 比較値2: //(3) break; } //(4)
2.defaultあり:値aが比較値1と一致する場合は1→2→5、比較値2と一致する場合は1→3→5、一致しない場合は1→4→5と処理します。
//(1) switch(値a){ case 比較値1: //(2) break; case 比較値2: //(3) break; default: //(4) } //(5)
3.caseから次のcaseの間にbreakが無い場合は条件が一致した後に最初に見つかるbreakまでcaseを処理します。値aが比較値1と一致する場合は1→2→3→6、比較値2と一致する場合は1→3→6、比較値3・4と一致する場合は1→4→5→6、一致しない場合は1→5→6、
//(1) switch(値a){ case 比較値1: //(2) case 比較値2: //(3) break; case 比較値3: case 比較値4: //(4) break; default: //(5) } //(6)