このレッスンはただ今 無料公開中 です。

初学者向け マンツーマン プログラミング・レッスン

PHPの分岐処理

「ある条件の時はAの処理を、そうでなければBの処理を実行する。」

このような条件分岐を行いたいときには if文 を使います。if文は分岐処理構文の1つです。PHPの分岐処理にはこの他に switch文 があります。

本章では頻度の高い if文 について重点的に学んでいきます。

if文

まずはcondition.phpファイルを新規作成して次のコードを書いて下さい。

condition.php
<?php
  $number = 25;
  if ($number >= 10) {
    print "10以上です". PHP_EOL;
  }

実行結果

10以上です

前章で学んだ比較演算子のひとつ >= が登場しました。分岐処理は比較演算子や論理演算子を用いて、結果が true の場合と false の場合で処理を分けていきます。
上記コードの場合、 $number には 25 が代入されていますが、それを if文 で次のような条件にあてはまるかどうかをチェックしています。

$number = 25;
if ($number >= 10) {
  // 処理
}

条件式は「$number >= 10」つまり「10以上かどうか」を評価しています。$numberの値 25 は10以上ですので、この結果は true です。trueの場合のみ、波括弧 { } で囲われたブロックの中に書かれた処理を実行します。

条件に当てはまらなかった場合の処理を決めることもできます。 else文 を使います。次のようにコードを書き換えて下さい。

condition.php
<?php
  $number = 6;
  if ($number >= 10) {
    print "10以上です". PHP_EOL;
  } else {
    print "10未満です". PHP_EOL;
  }

実行結果

10未満です

さらに、条件をいくつも設定することもできます。 elseif文 を使います。

condition.php
<?php
  $number = 6;
  if ($number >= 10) {
    print "10以上です". PHP_EOL;
  } elseif ($number >= 5) {
    print "5以上です". PHP_EOL;
  } else {
    print "10未満です". PHP_EOL;
  }

実行結果

5以上です

elseif文 はいくつでも設定可能です。

condition.php
<?php
  $number = 6;
  if ($number >= 10) {
    print "10以上です". PHP_EOL;
  } elseif ($number >= 7) {
    print "7以上です". PHP_EOL;
  } elseif ($number >= 5) {
    print "5以上です". PHP_EOL;
  } else {
    print "10未満です". PHP_EOL;
  }

実行結果

5以上です

if文の中にさらにif文を書いて、条件分岐を入れ子にすることもできます。

condition.php
<?php
  $number = 6;
  if ($number >= 10) {
    print "10以上です". PHP_EOL;
  } elseif ($number >= 7) {
    print "7以上です". PHP_EOL;
  } elseif ($number >= 5) {
    if ($number >= 6) {
      print "6以上です". PHP_EOL;
    } else {
      print "5以上です". PHP_EOL;
    }
  } else {
    print "10未満です". PHP_EOL;
  }

実行結果

6以上です

if文の基本形

if (条件A) {
  条件Aが true の場合の処理
} elseif (条件B) {
  条件Aが false で、条件Bが true の場合の処理
} else {
  それ以外(ABともに false )の場合の処理
}

分岐処理構文がなければ、プログラムは毎回決まった処理を行うことしかできません。しかしそれではプログラミングの意味がありませんね。if文はプログラム制御の要となる構文です。

構文自体はシンプルでわかりやすいですよね。ただ、条件式が複雑になってくるにつれて、頭で理解するのがつらくなってきます。たくさんのコードを書いて慣れていくようにしましょう。

練習問題1

次のif文の(条件式1、2)に正しい式を書いて、$numberが5の倍数の時は文字列の 'Buzz' を、3の倍数の時は 'Fizz' を、それ以外の場合はそのまま$numberの値を出力するようにしてください。尚、倍数を求めるには「余り」を求める剰余演算子 % を使います。

※ 3 と 5 のどちらの倍数でもある場合は、'Fizz' が出力されるようにしてください。

fizzbuzz_if.php
<?php
  $number = 30;
  if (条件式1) {
    print 'Fizz';
  } elseif (条件式2) {
    print 'Buzz';
  } else {
    print $number;
  }

コードが完成したら、変数$numberに好きな数値を代入して、その都度結果を確かめて下さい。変数がどのような値であっても、問題文の通りの出力となるように何度も実行→結果確認をしましょう。

論理演算子を使った条件式

ここまでは条件式のなかに比較演算子のみを使ってきました。if文の条件式には論理演算子を用いるケースも非常に多いです。

if (条件A || 条件B) {
  条件Aか条件Bのどちらかが true の場合の処理
} elseif (条件C && 条件D) {
  条件AとBがどちらも false で、条件CとDがどちらも true の場合の処理
} else {
  それ以外(ABCまたはABDが false)の場合の処理
}

条件式が複数絡み合ってかなり難解になってきました。プログラミングらしい論理的思考力が求められます。
考えて理解しようとすることも大切ですが、最初はとにかく手を動かして、たくさんのコードを書いて多くのケースに触れるようにしましょう。「慣れていく」ことが、上達への近道です。

練習問題2

練習問題1のコードに「3の倍数であり、かつ、5の倍数の場合は 'FizzBuzz' を出力する」という条件と処理を追加して下さい。その際に必ず論理演算子を用いるようにして下さい。

switch文

PHPの分岐処理にはif文の他にもうひとつあります。switch文です。 条件が == で表せるような場合で、かつ条件がたくさんあるようなケースでは、switch文の方が構造的にスッキリわかりやすく書くことができます。

switch.php
<?php
  $code = 'error';
  switch ($code) {
    case 'error':
      print '入力内容に不備があります'. PHP_EOL;
      break;
    case 'invalid':
      print 'その操作は無効です'. PHP_EOL;
      break;
    case 'timeout':
      print 'セッションが切れました。再度ログインして下さい'. PHP_EOL;
      break;
    case 'success':
    default:
      print '正常に終了しました'. PHP_EOL;
      break;
  }

実行結果

入力内容に不備があります

まず変数 $code に文字列 'error' が代入されています。 switch ($code) の部分で、変数 $code の値を判定することを宣言しています。それぞれの条件は case ○○ で○○に一致するかによって処理を分岐させていて、一致した場合はその case 内の処理を行います。また、ここで1点注意が必要です。case内の処理では、最後にかならず break; と書くようにしましょう。breakによってこのswitch文の処理は全て完了しますが、breakを忘れると、その次に書かれた case文 の処理を実行しています。

なお、switch文はif文でも代用することはできます。ですが、switch文の方が適しているケースでは積極的に使っていきましょう。

if文を使った場合

<?php
  $code = 'error';
  if ($code == 'error') {
    print '入力内容に不備があります'. PHP_EOL;
  } elseif ($code == 'invalid') {
    print 'その操作は無効です'. PHP_EOL;
  } elseif ($code == 'timeout') {
    print 'セッションが切れました。再度ログインして下さい'. PHP_EOL;
  } else {
    print '正常に終了しました'. PHP_EOL;
  }

行数はswitch文よりも短くなりますが、このケースではswitch文の方が構造的な見やすさは上のように思います。

本章ではswitch文の解説はここまでにとどめておきます。まだ説明しきれていない部分がありますが、実際に使うときになったら、自身で調ながら実装してみてください。

php switch

で検索すればすぐに知りたい情報を得ることができるかと思います。

三項演算子による条件分岐

三項演算子は演算子のひとつで、3つの項目を使用する唯一の演算子です。書式は次の通りです。

条件式 ? 処理1 : 処理2

これを普通のif文で表すとすると

if (条件式) {
  処理1
} else {
  処理2
}

となります。

わかりやすさで言えば後者ですが、記述の簡潔さでは前者の方が優れています。

$a == true ? $a = false : $a = true;

$aが true の時は false に変更し、そうでなければ true にしなさい、という内容です。スイッチのON/OFFのようなイメージです。これをif文で書くならば

if ($a == true) {
  $a = false;
} else {
  $a = true;
}

となるでしょう。

余談ですが、このコードはさらに次のように簡潔に書くこともできます。

$a = !$a;

! は否定・反転なので、$aに$aの反対を代入する、という内容になります。つまり、$aが true ならば false を、そうでなければ true を代入する、ということになります。

まとめ

いかがでしたか?
主にif文を使った条件分岐の構文について見てきましたが、これはあくまでもごく一部です。if文やswitch文、比較演算子、論理演算子、三項演算子を駆使することで、かなり複雑な処理を実現できることがわかってもらえたと思います。たくさんコードを書くことで、ロジカルな思考力をぜひ養って下さい。

さて、次の章ではもうひとつの制御構文である「繰返し処理」について学んでいきます。分岐処理と繰返し処理を使いこなすことができれば、プログラミングで解決できることがぐっと広がります。