ifとは簡単に言うと、
「こうだったらああしてください、ああだったらこうしてください、それ以外ならそうしてください」
と、条件によって処理を分岐させるものです。
全てのプログラミング言語にとって要と言っても過言ではありません。
ifを使いこなせるようになるだけで、できることの幅がグッと広がります!
ifの基本構文
PHPでのifの基本構文はラッキー!JavaScriptとほぼ同じです。
ほぼの理由については、後述します。
if(条件){
ifがtrueの時に実行される処理
}else{
ifがfalseの時に実行される処理
};
条件の部分が、真(true)と判定されると、ifブロック内の記述が実行され、偽(false)と判定されると、elseブロック内の記述が実行されます。
つまり「条件」の中は、bool型(真か偽)のデータが必然的入ります。
分かりやすいものとしては、不等号式などが挙げられます。
条件を3つ以上に分岐させる場合
条件を3つ以上に分岐させる場合、先ほどの構文のifとelseの間に、以下を必要な数だけ追加します。
elseif(条件){
実行される内容;
}
例えば2つ追加すると、以下のような形になります。
if(条件①){
実行される処理;
}elseif(条件②){
実行される処理;
}elseif(条件③){
実行される処理;
}else{
実行される処理;
};
条件①が偽であれば次の条件②へ、条件②が偽であれば次の条件③へと、上から順に真であれば実行され、偽であれば次の条件へ移っていきます。
サンプルコード
$scoreの値によって、出力する内容が変わるサンプルコードです。
<?php
// $scoreの数値を変えることで結果が分岐します
$score = 80;
if($score > 80){
echo '<p>素晴らしい!</p>';
}elseif($score > 60){
echo '<p>いいぞ!</p>';
}else{
echo '<p>がんばろう!</p>';
};
?>
注意!elseif か else if か
先ほど紹介したPHPの基本構文では「elseif」でも「else if」でもどちらでもOKです。
ただし、JavaScriptでは「else if」一択で、「elseif」だとエラーになります。
そして次に紹介する、HTMLの出力を分岐させるPHPの構文では「elseif」一択で、「else if」だとエラーになります。
ややこしいわ!今でも結構間違えます。
JavaScriptとほぼ同じと書いた理由はこれです。
条件式(比較演算子)
等号式や不等号式を書く際、記述にちょっとしたルールがあるので覚えておきましょう。
== | 等しい |
=== | 等しい |
!= | 等しくない |
!== | 等しくない |
> | より大きい |
>= | 以上 |
< | より小さい |
<= | 以下 |
さて、「等しい」と「等しくない」に2つのパターンがありますね。
これはデータ型の一致も含めるかどうかの違いです。
==と===、!=と!==の違い
===(!==)の方が判定が厳しく、データ型も一致して「真」と判定されます。
つまり、値が同じでもデータ型が違えば「偽」と判定されてしまいます。
一方、==(!==)の場合、データ型が違っても値が同じであれば「真」と判定されます。
サンプルコード
<?php
$num1 = 1;
$str1 = '1';
var_dump($num1 == $str1);
var_dump($num1 === $str1);
?>
条件式その2(理論演算子)
さて、もう少し条件式をややこしくしていきましょう。
ここまで扱えるようになれば、もうif文なんて怖くありません。
&& | かつ(and) |
|| | または(or) |
中学校の頃、数学の授業の集合の部分でやった・・・っけ・・・?
&&と||は、複数のbool型を繋げる時に使います。
さて、これらの記号がどのような結果になるのかみていきましょう。
真 && 真 | 真 |
真 && 偽 | 偽 |
偽 && 偽 | 偽 |
真 || 真 | 真 |
真 || 偽 | 真 |
偽 || 偽 | 偽 |
&&は、全ての条件が「真」の場合に「真」となります。
つまり、「偽」が1つでも混ざっていれば「偽」となります。
それに対し、||は、いずれかの条件が「真」であれば「真」となります。
つまり、「偽」が混ざっていようと、1つでも「真」があれば「真」となります。
これだけじゃない!HTMLの出力を分岐させる記述方法
PHPには、もう一つ超大事なifの記述方法があります。
PHPは、HTMLのコードと混在させながら記述していきますよね。
「この条件の場合は、こちらのHTMLを出力してください。
それ以外は、あちらのHTMLを出力してください。」
と、条件によって出力するHTMLを変更する記法があります。
非常によく使うので、絶対に覚えておきたい記述方法です。
記述方法
記述方法は以下のようになります。
<?php if(条件①): ?>
出力されるHTML
<?php elseif(条件②): ?>
出力されるHTML
<?php else: ?>
出力されるHTML
<?php endif; ?>
条件毎にPHPタグで囲んでいくといった感じでしょうか。
先ほどの基本構文と比較すると、注意したい点が2つあります。
① endif 参戦!
この記述方法の場合「if文はここで終わりますよ」というサインが必要です。
そのためif文の最後を
<?php endif; ?>
で締めくくっています。
② :(コロン)と;(セミコロン)に注意!
if()、elseif()、else の後ろには、セミコロンではなくコロンが使われます。
セミコロンが使われるのは、最後のendif部分のみで、あとは全てコロンが使われます。
地味な違いですが、この記号一つ間違えるだけでエラーになるので注意が必要です。
サンプルコード
先ほどのスコアによる条件分岐のサンプルコードを書き換えると下記のようになります。
<?php
// ここの数値を変えることで結果が分岐する
$score = 50;
?>
<?php if($score > 80): ?>
<p>素晴らしい!</p>
<?php elseif($score > 60): ?>
<p>いいぞ!</p>
<?php else: ?>
<p>がんばろう!</p>
<?php endif; ?>
行数としては変わりませんが、HTML部分の記述にechoが不要になるので、記述がとても分かりやすく綺麗になります。
どこで使うのか
とにかくめちゃくちゃ使います。
例えばブログ一覧ページだと、記事が1件でもあれば記事を表示し、記事が1件もなければ「記事がありません」と表示させるときに使います。
他にもフォーム送信の場合、フォームの入力内容が正しければ「こちらの送信内容でよろしいですか」と表示し、入力内容に不適切な部分があれば「○○が未入力です」と表示するときも使います。
絶対に覚えておきたい構文なのですが、使用頻度がかなり高くなると思いますので、おそらく嫌でも勝手に覚えます!
またif文で事足りるので余裕のない方は無視してもいいのですが、if文をよりシンプルにした三項演算子というものもあります。
複雑な条件分岐はできませんが、ちょっとした条件分岐にはとても便利です。
こちらの記事も是非ご一読ください。
三項演算子について