Blog スタッフブログ

【PHP入門】条件分岐 Vol.5【初心者向け】

Category | Blog
Tag | /
/ 11,768views

新年あけましておめでとうございます。CTOの奥田です。
2019年も今までと変わりなくブログにていろいろな情報を発信していこうと思いますので本年もどうぞよろしくお願いいたします。

さて、久しぶりのPHP入門ですが、今回はプログラミングにとって基本の「き」ともいうべき条件分岐についてご説明したいと思います。

Table of contents

  1. 条件分岐とは
  2. if文
  3. 論理値
  4. 比較演算子
  5. 論理演算子
  6. elseとelseif
  7. switch文
  8. 三項演算子
  9. Null合体演算子
  10. さいごに

条件分岐とは

PHPだけでなく多くのプログラムは上から下へ順番に実行されていきます。
プログラムを書いていると特定の条件によって処理を分けたい場面が出てきます。
そんな時は条件分岐を使います。

if文

if文は以下のようにして書きます。

if(条件式){
	// ここに条件に一致した時の処理を書く;
}

条件式には後述する比較演算子などを使用して式を書きます。
この条件がTRUE(真)となった時ブロック({})内の文が実行されます。

$old = 30;
if($old >= 20){
	print "年齢は20歳以上です。";
}

また、実行文が1行のみの場合はブロック({})を省略することができます。

if(条件式)
	条件に一致したときの処理;

論理値

if文では条件式の結果がTRUE(真)かFALSE(偽)かで処理する内容を振り分けています。
これを論理値といいます。
ifの条件式は必ず条件式の結果が「TRUE」であるということに注意してください。
下記のように値はFALSEでもその結果がTRUEであるならばブロック内の処理が実行されます。

$flag = false;
// $flagがtrueでないならば
if($flag != true){
	$flagがfalseの時実行される処理;
}

また、条件式が論理値とは異なる値だった場合、論理値に変換されます。
以下の値以外の場合すべてTRUEに変換されます。

  • FALSE
  • 整数の0と浮動小数点数の0.0
  • 空文字””
  • 文字列の”0″
  • 要素の数が0の配列
  • NULL
  • メンバ変数の数がゼロであるオブジェクト

比較演算子

ifなどの条件分岐には「〇〇と等しい」や「〇〇より大きい」などの条件を記述します。
この時使うのが比較演算子と呼ばれるものです。
PHPで使用できる比較演算子は以下です。

比較演算子意味
==左辺と右辺の値が等しい
===左辺と右辺の値が等しく型も等しい
!=左辺と右辺の値が等しくない
<>左辺と右辺の値が等しくない
!==左辺と右辺の値または型が等しくない
>右辺より左辺が大きい
>=右辺より左辺が大きいか等しい
<右辺より左辺が小さい
<=右辺より左辺が小さいか等しい

比較演算子は左辺と右辺に指定した数値や文字列を比較し等しいか等しくないか、または大きいか小さいかなどを比較します。
そして真となった場合にはTRUE、偽となった場合にはFALSEを返します。

「==」と「===」の違いは型のチェックまで行うかという違いです。
下の例は通りますが、

$a = 0;
$b = "0";
if($a == $b){
	echo "Same!";
}

下の例では通りません。

$a = 0;
$b = "0";
if($a === $b){
	echo "Same!";
}

$aは数値 (integer)であり$bは文字列(string)なので型のチェックまで厳密に行う場合は「===」や「!==」を使用します。

論理演算子

比較演算子によって単一の式を記述できますが、「〇〇かつ〇〇」や「〇〇または〇〇」などのより複雑な条件が必要な場合があります。
そんなときは論理演算子と組み合わせて使用します。
PHPで使用できる論理演算子は以下です。

論理演算子意味
&& または and左辺と右辺が共に真の場合に真
|| または or式の少なくとも1つが真の場合に真
xor左辺か右辺のどちらか1つだけが真の場合に真
!式が真の時に偽、偽の時に真

ANDの場合は下記のようにif(式 && 式)がif(真 && 真)のときのみ処理が実行されますが、

if($foo == "foo" && $bar >= 20){
	// $fooの値がfooかつ$barが20以上であれば処理が実行される
}

ORの場合はif(式 || 式)がif(真 || 偽)やif(偽 || 真)などひとつでもTRUEであれば処理が実行されます。

if($foo == "foo" || $bar >= 20){
	// $fooの値がfooまたは$barが20以上であれば処理が実行される
}

elseとelseif

ここまでTRUE(真)のときのみの記法をご説明しましたが、条件式がFALSE(偽)の時に実行する処理も記述することが可能です。
この時elseを使用し、以下のように記述します。

if(条件式){
	// ここに条件に一致した時の処理を書く;
}else{
	// ここに条件に一致しない時の処理を書く;
}

また複数の条件分岐を行いたい場合、if文ではelseif文を使用します。

if(条件式①){
	// ここに条件式①に一致した時の処理を書く;
}elseif(条件式②){
	// ここに条件式②に一致した時の処理を書く;
}elseif(条件式③){
	// ここに条件式③に一致した時の処理を書く;
}else{
	// ここに条件に一致しない時の処理を書く;
}

elseifは任意の数指定が可能ですが、この時上から順に評価される点に注意が必要です。

switch文

同じ変数を異なる値と比較し、値に応じて異なったコードを実行したい場合はif文を使い、以下のようにすれば可能です。

if ($a == "apple") {
    echo "$a is apple.";
} elseif ($a == "orange") {
    echo "$a is orange.";
} elseif ($a == "grape") {
    echo "$a is grape.";
}

これはこれで間違ってはいませんが以下のようにしてswitch文を使って書くことも可能です。

switch ($a)  {
	case "apple":
		echo "$a is apple.";
		break;
	case "orange":
		echo "$a is orange.";
		break;
	case "grape":
		echo "$a is grape.";
		break;
}

switch文の基本的な書き方は以下です。
switch文は、行毎に実行されます。switch式の値と同じ値として評価される式を有するcase文が見つけられたときに初めてPHPにより命令の実行が行われます。
PHPはswitchブロックの終わりまたは最初のbreak文まで実行を続けます。case文の終わりにbreak文を書かない場合は、PHPは次のcase文を実行しつづけます。
ですのでbreak文を必ず書くことに注意してください。

switch (式)  {
	case 値①:
		式が値①と等しい時の処理1;
		break;
	case 値②:
		式が値②と等しい時の処理1;
		break;
	default
		式がいずれの値にも等しくない時の処理;
}

三項演算子

三項演算子は演算子のひとつで3つの項目を使用する唯一の演算子です。書式は次の通りです。
条件式を評価し、TRUEであれば式①、FALSEであれば式②を返します。

条件式 ? 式① : 式②

if文とは異なり三項演算子は演算子のひとつですので結果として式を返します。
if文のように条件に応じた処理を記述するのではない点に注意して下さい。

$language = "jp";
$message = ($language == "jp") ? "こんにちは" : "Hello";
echo $message; // こんにちは

Null合体演算子

PHP7 以降ではさらに、”??” 演算子 (null合体演算子) が使えるようになりました。
Null合体演算子を使用すると値が”Null”の時デフォルト値の指定が可能です。

// Null合体演算子の使用例
$a = $b ?? 'default';

// 上の文は、この if/else 文と同じ意味です
if (isset($b)) {
	$a = $b;
} else {
	$a = 'default';
}

さいごに

今回はプログラミングで本当によく使う条件分岐についてご説明しました。
その使い方は条件によって表示を変えたり、挙動を変えたり様々です。
少しでも皆さんの参考になれば幸いです。

Category | Blog
Tag | /
Author | Mineo Okuda / 11,768views

Company information

〒650-0024
神戸市中央区海岸通5 商船三井ビルディング4F

Contact us

WEBに関するお問い合わせは
078-977-8760 (10:00 - 18:00)