ゼロから始めるPHP講座Vol09 if文を使った条件分岐の方法


ゼロから始めるPHP講座Vol09 if文を使った条件分岐の方法
目次
  1. ゼロから始めるPHP講座if文を使った条件分岐の方法
  2. if文とは
  3. if文の書き方
  4. if文の条件
  5. 「==」と「===」の違い
  6. 補足.「==」について
  7. if文と論理演算子
  8. if文の使用例
  9. 課題

ゼロから始めるPHP講座if文を使った条件分岐の方法

if文とは

if文は条件によって処理内容を変更することができ、状況に応じた複雑な処理を行うことができます。


<pre>
<?php

$score = mt_rand(0, 100); //0以上100以下の数値をランダムで返す

if ($score >= 80) {
    print 'ヽ( ゚∀゚)ノキタ━!!';
} else if ($score <= 30) {
    print '(´・ω・<code>)ショボーン';
} else {
    print 'ヽ(´ー`)ノマターリ';
}

?&gt;
&lt;/pre&gt;

php-if1-639

if文を使った条件分岐により、1行のみランダムで表示される仕組みとなっています。

if文の書き方

以下のような書式で条件分岐を行います。

php-if2-639

このように書くことで、条件に一致したかどうかで処理内容を振り分けることができます。

if文において「elseif」や「else」は省略可能で、「if」のみのプログラムや、「ifとelse」のプログラムを作成することも可能です。

次にそれぞれ例を示します。


<?php
$rand = mt_rand(0, 100);

if ($rand >= 60) {
    print '合格!!';
}
?>

上記は「if」のみを利用しており、変数randが60以上の場合は合格と表示されますが、60より小さい場合は何も表示されません。


<?php
$rand = mt_rand(1, 10);

if ($rand >= 6) {
    print '当たり';
} else {
    print '外れ';
}
?>

上記は「ifとelse」を利用しており、110のランダムな数字を取得し、6以上の場合は当たりと表示し、それ以外(今回の場合は6未満)は外れと表示します。

if文の条件

if文は条件により処理を変えることができますが、その条件は「データ型」の講義で説明した論理型(boolean)のtruefalse判定

通常、比較演算子を用い、比較した結果一致する場合はtrue、一致しなかった場合はfalseとなることを利用します。

先ほど作成したif.phpに以下3行を追加し、trueの条件になったif文が表示されていることを確認しましょう。


&lt;pre&gt;
&lt;?php

$score = mt_rand(0, 100); //0以上100以下の数値をランダムで返す
print $score . &quot;\n&quot;;
var_dump($score &gt;= 80);  // ヽ( ゚∀゚)ノキタ━!!
var_dump($score &lt;= 30);  // (´・ω・</code>)ショボーン

if ($score &gt;= 80) {
    print 'ヽ( ゚∀゚)ノキタ━!!';
} else if ($score &lt;= 30) {
    print '(´・ω・`)ショボーン';
} else {
    print 'ヽ(´ー`)ノマターリ';
}

?&gt;
&lt;/pre&gt;

以前紹介したように、比較演算子には「===」(等しい)、「!==」(等しくない)、「>=」(以上)、「<」(未満)など、様々な比較の例がありますが、どれも比較した結果は、true又はfalseとなります。

「==」と「===」の違い

どちらも左辺と右辺が等しいか比較しますが、この2つはデータ型を比較するかしないかとなります。

型と値を比較値のみで型を比較をしない※厳密には異なり、詳細は「補足」を参照

お手本通り、プログラムを書いて確認してみましょう。ファイル名:comparison.php


<pre>
<?php
$int = 123;
$str = '123';
//$str = '123abc123'; //補足用

if ($int == $str) {
    print '$int == $str is true' . "\n";
} else {
    print '$int == $str is false' . "\n";
}

if ($int === $str) {
    print '$int === $str is true' . "\n";
} else {
    print '$int === $str is false' . "\n";
}
?>
</pre>

php-if3-639

数値型の123と文字列型の123を比較した場合、型(箱の形)まで比較を行う「===」はfalse、行わない「==」はtrueとなります。

php-if4-639

どちらを使うべきかですが、基本的には「===」を使うべき

型の比較を行わない「==」はバグの原因になりやすいなど理由は様々ありますが、ひとまず本ブログでは変数の型を意識してもらう意味も含めて、「===」を使ってプログラムを書くようにしましょう。

補足.「==」について

「==」は型の比較はしないと説明致しましたが、厳密には「型を片方に合わせるよう変換した後に比較する」が正しくなります。

例えば文字列型と数値型を「==」で比較した場合は、文字列型を数値型に自動で変換した後に、比較を行います。

この型の変換というのはPHPで定義されている一定の法則で行われているのですが、一部困った法則になっており、バグの原因となることがあります。

下記のようにcomparison.phpの補足用と書かれている行のコメントを外し、1つ上の行をコメントアウトするよう変更し、ブラウザで結果を確認してみましょう。


<pre>
<?php
$int = 123;
//$str = '123';
$str = '123abc123'; //補足用

if ($int == $str) {
    print '$int == $str is true' . "\n";
} else {
    print '$int == $str is false' . "\n";
}

if ($int === $str) {
    print '$int === $str is true' . "\n";
} else {
    print '$int === $str is false' . "\n";
}
?>
</pre>

php-if5-639

文字列から数値型への型変換を行った場合、「最初の数値から数値以外の文字が出るまで」を数値として見なし、それ以降は全て無視されます。

php-if6-639

このため、「‘123abc123’==123」はtrueとなります。

型を自動で変換して比較してくれるのは便利なように思えますが、予期せぬ動作を起こしてしまう可能性があります。

このため、より厳密にプログラムを書くことが、遠回りなようで一番の近道となることが多くあります。

if文と論理演算子

if文の条件に論理演算子を利用することで、より複雑な条件を指定することができます。


<pre>
<?php

$score1 = mt_rand(0, 100);
$score2 = mt_rand(0, 100);
$sum = $score1 + $score2;

print 'score1: ' . $score1 . "\n";
print 'score2: ' . $score2 . "\n";
print 'sum: ' . $sum . "\n";

// 合計が160以上またはscore1かscore2が100
if ($sum >= 160 || $score1 === 100 || $score2 === 100) {
    print '特待生' . "\n";
// 合計が120以上かつscore1とscore2が40以上
} else if ($sum >= 120 && $score1 >= 40 && $score2 >= 40) {
    print '合格' . "\n";
// 合計が110以上
} else if ($sum >= 110) {
    print '補欠合格' . "\n";
// 条件外
} else {
    print '不合格' . "\n";
}
?>
</pre>

php-if7-639

0100のランダムな数値score1とscore2とこの合計値sumを取得した後、if文の中で論理演算子「&&」や「||」を利用し、複数の条件を指定しています。

php-if8-639

「&&||

if文は論理演算子を組み合わせると条件が複雑になり、実際に自分でプログラムを書くのが難しく感じるかもしれません。

この場合はまずコメント部分のように日本語(文章)でif文の条件を整理することをお薦めします。

if文の使用例

if文はHTMLではできない、条件によって表示する内容を変えるという動的なページ作成に必要となります。


<?php
$rand = mt_rand(1, 10); // 110の値をランダムに取得
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ifの使用例</title>
    <style type="text/css">
        .em_red {
            color: #FF0000;
        }
    </style>
</head>
<body>
    <h1>抽選システム</h1>
    <p>値は:<?php print $rand; ?></p>
<?php if ($rand <= 3) { ?>
    <h2 class="em_red">当たり!!</h2>
<?php } else { ?>
    <h2>残念でした・・また引いてね</h2>
<?php } ?>
</body>
</html>

php-if9-639

SNSなどによくあるユーザ認証の際、認証に成功したらトップページ、失敗したらエラーページを表示というのは、if文を用いて出し分けを行っています。

課題

サイコロ(16)を振り、「出た数字」と「偶数か奇数か」の2つの情報を表示してください。

NEXTLESSON配列とは配列とは

PREVLESSON演算子の種類演算子の種類


CodeCampus編集部
この記事を書いた人
CodeCampus編集部
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp