if-else文


プログラムの実行を分岐する

PHP スクリプトは、指示がなければ単純にテキストの上部から下部に向かって実行されます。 この流れを変え、プログラムを分岐させることで状況に応じて適切なコードを実行するスクリプトを書けるようになります。 プログラムの流れを分岐させるには if 文を用います。

if ( )

if 文は、式の値が TRUE であればその後に続く文を実行し、そうでなければ文を無視して実行しません。 そこで、文を実行するかしないかを決定する条件式を比較演算子で記述すれば、条件によってプログラムの流れが変化するようになります。

<?php
	if (TRUE) echo "ごきげんよう、お姉さま";
	if (FALSE) echo "横暴ですわ。お姉さまの意地悪";
?>

このプログラムを実行すれば、if(TRUE) の直後の文は実行されますが、if(FALSE) の直後の文は実行されないことがわかるでしょう。

if 文に関連付けられる実行するかしないかを判定される文は常に1つです。その後の文は if 文の対象外となります。 複数の文を if 文で実行するかしないかを判断する対象としたい場合は、次のようにブロックを使います。

{ ブロック本体 }

ブロックは、最上部から最下部まで逐次に文を実行する文の集合です。 ひとつのブロックは文として扱うことができるため、このように if 文などの制御構造で利用することができます。

<?php
	if (TRUE) {
		echo "Blue Blue Glass Moon,\n";
		echo "\tUnder the Crimson Air.";
	}
	if (FALSE) {
		echo "Kitty on your lap";
	}
?>

このプログラムでは、if 文に対して実行する文をブロックで指定しています。 ブロックは任意の数の文の集合なので、これで複数の文を if 文に関連付けることができます。


if-else

if 文の条件は式が TRUE であれば文を実行するというものでしたが、では FALSE であれば実行したいという場合はどうするのでしょうか。 もし、条件が TRUE ではなく if に関連付けられた文が実行されなかった場合に実行させたいコードがある場合、if 文に else 節を追加します。

if ( ) else

else 節が記述されている if 文は、式が FALSE だった場合は else の直後に指定された文を実行します。 これで、条件が TRUE だった場合と FALSE だった場合の両方の処理をカバーすることができます。

<?php
	$var = 10;
	if ($var == 100) echo "ごきげんよう、お姉さま";
	else echo "横暴ですわ。お姉さまの意地悪";
?>

このプログラムは、else 節を持つ if 文によって、条件が TRUE だった場合と FALSE だった場合のコードを実現しています。 変数 $var の値を変更して、それぞれの動作を確認してください。


elseif

if 文で調べなければならない条件が多くある場合、必然と if 文は階層化されます。 if 文の階層化は、else 節の文でさらに if 文を指定し、その if 文の else 節でさらに if 文を、という形が一般的です。

<?php
	$var = 100;
	if ($var < 100)
		echo "\$var は 100 よりも小さい";
	else if($var == 100)
		echo "\$var は 100 と等しい";
	else echo "\$var は 100 よりも大きい";
?>

このプログラムは、変数 $var の値が 100 以下、100 と等しい、100 以上の処理に分岐するために階層的な if 文を作成しています。 else 節が対応している if 文の関係に注意してください。 else は常に直前の if に対応します。

PHP では、このような処理を階層化ではなく言語仕様でサポートする elseif 節を提供しています。 elseif 節は if 文の式が FALSE だったとき、異なる if 条件を与えるというもので、上記のプログラムの else if( ) の部分と同じ動作をします。 else は if に対してひとつしか指定できませんが、elseif は何度でも記述することができます。

<?php
	$var = 100;
	if ($var < 100)
		echo "\$var は 100 よりも小さい";
	elseif($var == 100)
		echo "\$var は 100 と等しい";
	else echo "\$var は 100 よりも大きい";
?>

このプログラムは、if 文を階層化する変わりに elseif 節を用いて複数の条件を if 文でチェックしています。



前のページへ戻る次のページへ