IF文
「もし○○だったら、△△する」というような、条件によって処理を分けたい時に使います。
プログラムの流れは、条件が成り立った場合と成り立たなかった場合の2つに分かれます。
if文には以下の3つの種類があります。
if
条件が成り立つ時を真(TRUE)といいます。反対に、条件が成り立たない時を偽(FALSE)といいます。
書き方例
<?php $a = 10; // 「$aが10だったら」という条件 if ($a === 10) { // 条件にあった場合処理をする。 print '$aの値は10です。'; } ?>
実行結果
if~else
条件が成り立つ場合のみ、処理1が実行されます。
条件が成り立たない場合、処理2が実行されます。
書き方例
<?php // $aに値を代入 $a = 10; // 「$aが5だったら」という条件 if ($a === 5) { // 条件に合った場合の処理。 print '$aの値は5です。'; } else { // 条件に合わなかった場合の処理。 print '$aの値は5以外です。'; } ?>
実行結果
if~elseif~else
複数の条件のどれにあてはまるかによってそれぞれ違う処理を行いたい時は、elseifを使います。
条件が成り立つ場合のみ、処理1が実行されます。
条件2が成り立つ場合のみ、処理2が実行されます。
条件3が成り立つ場合のみ、処理3が実行されます。
全ての条件が成り立たない場合、処理4が実行されます。
<?php $a = 10; // 「$aが1だったら」という条件 if ($a === 1) { // 「$a === 1」の条件に合った場合の処理。 print '$aの値は1です。'; } elseif ($a === 5) { // 上記の条件に合わず、条件「$a === 5」にあった場合の処理。 print '$aの値は5です。'; } elseif ($a === 10) { // 上記の2つの条件に合わず、条件「$a === 10」にあった場合の処理。 print '$aの値は10です。'; } else { // どの条件にも合わなかった場合の処理。 print '$aの値は1と5と10以外です。'; } ?>
実行結果
入れ子になったif文
if文をはじめとする制御文では、処理の中にさらに制御文を含める事ができます。
if (条件1){
if(条件2){
処理1
}else{
処理2
}
}else{
処理3
}
条件1と条件2が成立する場合、処理1が実行されます。
条件1のみ成立する場合、処理2が実行されます。
条件1が成立しない場合、処理3が実行されます。
<?php // $aに値を代入 $a = 10; // $aが5より大きいという条件 if ($a > 5) { // $aが8という条件 if ($a === 8) { // 上記2つの条件に合った場合の処理 print '$aの値は8です。'; } else { // 「$aが5より大きい」という条件に合ったが、「$a === 8」という条件に合わなかったときの処理 print '$aの値は5より大きく、8以外です。'; } } else { // 「$aが5より大きい」という条件に合わなかったときの処理 print '$aの値は5より小さい。'; } ?>
実行結果
if文の条件で使われる演算子
比較演算子 | ||
---|---|---|
例 | 内容 | 結果 |
$a == $b | 等しい | 型の相互変換をした後で $a が $b に等しい時に TRUE。 |
$a === $b | 等しい | $a が $b に等しく、および同じ型である場合に TRUE 。 |
$a != $b | 等しくない | 型の相互変換をした後で $a が $b に等しくない場合に TRUE。 |
$a <> $b | 等しくない | 型の相互変換をした後で $a が $b に等しくない場合に TRUE。 |
$a !== $b | 等しくない | $a が $b と等しくないか、同じ型でない場合に TRUE 。 |
$a < $b | より少ない | $a が $b より少ない時に TRUE。 |
$a > $b | より多い | $a が $b より多い時に TRUE。 |
$a <= $b | より少ないか等しい | $a が $b より少ないか等しい時に TRUE。 |
$a >= $b | より多いか等しい | $a が $b より多いか等しい時に TRUE。 |
数値や変数の値を利用して条件式を作り、その結果によって処理を変える時に使うのが比較演算子です。
条件が成立した場合を「真(TRUE)」、成立しない場合を「偽(FALSE)」といいます。
PHPは、他のプログラミング言語に比べて、データ型が厳密ではありません。
例えば、「TRUE」「1(数字の1)」「"1"(文字列の1)」
これらの値(データ)は型が違います。人間の目で見てもそれぞれ別の値(データ)に見えますが、比較演算子の「==」で比較すると、同じものとして扱われます。
これは「==」が型の違いを比較しないからです。
厳密な比較が必要な際は、「==」ではなく「===」を使うようにしましょう。
論理演算子 | ||
---|---|---|
例 | 名前 | 結果 |
$a and $b | 論理積 | $a および $b が共に TRUE の場合に TRUE |
$a or $b | 論理和 | $a または $b のどちらかが TRUE の場合に TRUE |
$a xor $b | 排他的論理和 | $a または $b のどちらかが TRUE でかつ両方とも TRUE でない場合に TRUE |
! $a | 否定 | $a が TRUE でない場合 TRUE |
$a && $b | 論理積 | $a および $b が共に TRUE の場合に TRUE |
$a || $b | 論理和 | $a または $b のどちらかが TRUE の場合に TRUE |
複数の条件を組み合わせて、より複雑な条件を表す時に使うのが論理演算子です。
「&&」と「and」、「||」と「or」は、判定自体は一緒なのですが、実行される優先度が違います。
「&&」 は 「and」 よりも優先度が高く、「||」 は 「or」 よりも優先度が高く設定されています。
そのため、この2種類の演算子を条件判定式の中で混在させると、判定結果が変わってしまうことがあります。
・xorについて
(false xor false) → false
(false xor true) → true
(true xor false) → true
(true xor true) → false
と、なります。
switch文
switch
if文は、条件式がTRUE(合っている)かFALSE(合っていない)かによる判定でしたが、switchは式の値を条件とし、またそれを複数指定することができます。
switch文はcase句と一緒に使用する。
式の値が判定され、caseの値に適合した処理が実行される。
break句に到達すると、switchブロックを抜ける 。
break句がない場合は、次のcase句やdefault句の処理へ突入する。
switchの式がどれにも当てはまらない場合は、default句に遷移する。
default句は省略可能。
<?php $a = 1000; // $aの値によって分岐します。 switch ($a) { case 1000: // $aが1000の時 print '$aの値は1000です。'; break; case 2000: // $aが2000の時 case 3000: // $aが3000の時 print '$aの値は2000か3000です。'; break; default: // 上記のどの条件にも当てはまらない時 print '$aの値は1000・2000・3000以外です。'; break; } ?>
実行結果