PHP

第7章 if文

  1. 最終更新日:
  2. 公開日:

この章ではプログラミングの基本構文の1つである「if文」の扱い方を学びます。if文を使えるようになると、プログラムに判断する力を与えることができます。

基本的な使い方

if文の基本的な形は、次のようになります。

図1

if文の基本的な形

()内の条件式をみて、正しい場合には{}内の処理を実行します。プログラミングでは「正しい」かの判断は、「true(正しい)」か「false(正しくない)」のどちらかとなります。

例えば、「50 == 50」という左右の値を比較する式があるとしたら、この場合は等しいので「true」となります。
しかし、「40 == 50」という式の場合は、左右の値が等しくないので「false」です。
左右の値が等しいかを判断する式の他にも、「0 < 10」のように「右の値は左の値より大きいか」と比較する式や、逆に「右の値は左の値より小さいか」を比較する式もあり、必要に応じて様々な組み合わせを使うことができます。

これらの「==」や「<」「>」などはまとめて「比較演算子」と呼びますが、そもそも「==」や「<」て何?となりますよね。まずはここから見ていきましょう。

比較演算子

比較演算子には、次のようにいくつか種類があります。

PHP コード例

<?php
$a = 5;
$b = 10;
$c = 3;

// (1) 左右の値が等しいか判定
var_dump($a == $b);  // 5 == 10 -> false

// (2) 左右の値が異なるか判定
var_dump($a != $c);  // 5 != 3 -> true

// (3) 左の値より右の値が大きい(右の値より左の値の方が小さい)か判定
var_dump($a < $b);  // 5 < 10 -> true

// (4) 左の値より右の値の方が小さい(右の値より左の値が大きい)か判定
var_dump($b > $c);  // 10 > 3 -> true

// (5) 右の値が左の値以上に大きいか判定
var_dump($b <= ($a*2));  // 10 <= 10 -> true

// (6) 左の値より右の値が等しい、または小さいか判定
var_dump(($a + $c) >= $b);  // 8 >= 10 -> false

(3)と(5)、(4)と(6)の比較演算子は似ていますが、(3)(4)は左右の値が等しいときは「false」となり、(5)(6)は等しいときも「true」となります。「より大きい・より小さい」と「以上・以下」のような違いです。

簡単な例で言うと「9より大きい」「9より小さい」だと「9」は含みませんが、「9以上」「9以下」の場合は「9」も含まれますよね。これと同じです。

(1)の「==」や(2)の「!=」は、値が整数であっても文字列であっても、とにかく等しければ「true」となります。
これは一見便利そうなのですが、状況によっては「整数の◯◯」とより厳密にチェックしたいときもあると思います。

そんなときのための比較演算子もちゃんと用意されていますが、その前に簡単に値の「」にどんなものがあるかだけ確認しておきましょう。

値の「型」

変数などに代入される値にはそれぞれ「型」というものがあり、その値がどういうものかによってPHPが自動的に決めてくれています。

PHP コード例

<?php
var_dump(100);  // -> 整数型(integer)
var_dump(true);  // -> 論理型(boolean)
var_dump(0.186);  // -> 浮動小数点数(float)
var_dump("Test");  // -> 文字列(string)
var_dump(null);  // -> 値のないNULL型

実行してみると以下のようになります。
var_dump関数は値の型まで出力してくれるので便利ですね。

出力例:

int(100) bool(true) float(0.185) string(4) "Test" NULL

上記の他にも、配列の「Array」、これから扱うオブジェクトの「Object」があります。

少し紛らわしくなってしまうのが数字の扱いです。
整数の「4」、文字列の「4(半角数字)」、浮動小数点数の「4.0」は全て同じ「4」ですが、型は異なるのでプログラム上では厳密に言うと等しい値ではありません。
その結果、if文などで判定する際に望んだ結果とならない原因になることがあります。

そこで活躍するのが、値の型まで確認してくれる比較演算子「===」や「!==」です。

PHP コード例

<?php
// 整数と文字列の比較。「==」は型まで確認しないので等しい判定となり「true」
var_dump(4 == '4');

// 整数と文字列の比較。「===」は型まで確認するので異なる判定となり「false」
var_dump(4 === '4');

// 整数と浮動小数点数の比較。「===」は型まで確認するので異なる判定となり「false」
var_dump(4 === 4.0);

// 整数と浮動小数点数の比較。「!=」は型まで見ないので等しい判定となり「false」
var_dump(4 != 4.0);

// 整数と浮動小数点数の比較。「!==」は型まで確認するので異なる判定となり「true」
var_dump(4 !== 4.0);

比較演算子によって、型の違いまで判定することができることをイメージできたら完璧です。

if〜else文

if文へ話しを戻します。
if文の基本的な書き方はすでに見てきたので、1歩進んでelse文です。
次のコードを入力し、実行してみてください。

PHP コード例

<?php
$a = 10;
$b = 8;

if( $a < $b ) {
  echo '$bの値の方が大きい';
} else {
  echo '$aの値の方が大きい';
}

このコードをそのまま実行すると、「$aの値の方が大きい」と出力されると思います。
$a$bの値を変えてみて出力の変化を見てみると、if文がどういう動きをしているかが分かります。

else {}は、if文の条件式で判定が「false」だった場合に実行されます。
つまり、条件式が正しい(true)場合はif( 条件式 ) {}の中の処理を実行し、正しくない(false)場合はelse {}の中の処理を実行する、ということです。必ずどちらかしか実行されません。

このようにif文を書けるようになったことで、冒頭で書いた通り「プログラムに判断する力」を与えることができるようになりました。
さらにもう1歩進んで、「高度に判断する力」を与えてみましょう。

elseif文

if文は「Aの処理か、Bの処理か」の2択だけでなく、「Aの処理かBの処理か、それともCの処理か」といった形にすることも可能です。
それが、「elseif文」です。
単純にif文の条件式が増えるものですが、説明よりもコードの方がイメージしやすいと思います。
先ほどのコードを次のように変更してください。

PHP コード例

<?php
$a = 10;
$b = 8;

if( $a < $b ) {
  echo '$bの値の方が大きい';
} elseif( $a === $b ) {
  echo '$aと$bの値は等しい';
} else {
  echo '$aの値の方が大きい';
}

if文に条件式が一つ増えました。そのまま実行した場合は修正前と出力結果が変わりませんが、$aの値を「8」にして実行すると、追加したelseif文の式で「true」となって「$a$bの値は等し」という出力になるはずです。

このように、if文では上から順に条件式を判定していって、最終的に正しい式がなかったときはelse文を実行する流れになっています。そして、elseif文は必要に応じて複数書くこともできます。

PHP コード例

<?php
$a = 10;
$b = 8;
$c = 5;

if( $a < $b ) {
  echo '$aより$bの値の方が大きい';
} elseif( $a === $b ) {
  echo '$aと$bの値は等しい';
} elseif( $c < $a ) {
  echo '$aは$cより大きい';
} elseif( $b === $c ) {
  echo '$bと$cの値は等しい';
} else {
  echo '$aの値の方が大きい';
}

まとめ

これで、プログラミングの基本構文の1つである「if文」を扱えるようになりました。
次の章では、複数の条件分岐を効率良く書く方法を学んでいきます。

この章で学んだこと

  • if文を使って、実行する処理を「条件分岐」させることができる
  • if文は必要に応じて「elseif文」を使って複数の条件分岐をさせることができる
  • if文の条件式には「比較演算子」を使うことができる
  • 値には主に「整数」「論理」「浮動小数点数」「文字列」「NULL」の5つの「型」がある

記事一覧

  1. 第1章 PHPが動く仕組み
  2. 第2章 変数と定数
  3. 第3章 配列
  4. 第4章 スーパーグローバル
  5. 第5章 クッキーとセッション
  6. 第6章 サーバー情報の取得
  7. 第7章 if文
  8. 第8章 switch文
  9. 第9章 while文
  10. 第10章 for文
  11. 第11章 foreach文
  12. 第12章 独自の関数
  13. 第13章 オブジェクト指向
  14. 第14章 クラス
  15. 第15章 オブジェクト

記事一覧