【PHP講座06】if文で条件によって処理を分岐させよう

PHP講座

前回は、アクセス時に送られてきたデータをPHPで受け取る、ということを解説した。

細かいGETとPOSTの違いなどについてはまだ解説しておらず、別途解説をするつもりだ。

待てない、という方は先に調べてみよう。

前回の記事は以下だ。

【PHP講座05】HTMLのフォームから値を受け取ろう | Shino’s Mind Archive

さて、今回はまたPHP単独の内容に移る。

タイトルにある通り、条件分岐を行うif文を解説していく。

ここも基本中の基本なので、しっかりマスターしていこう。

なお、次回解説する繰り返し処理にも今回の内容を使うので、そういった意味でも確実に進めていきたい。

スポンサーリンク

条件分岐を行うif文

プログラミングでほぼ必ずと言っていいほど、この条件分岐というものが出てくる。

これは、データの中身が○○だったらこの処理を行う、といった考え方だ。

では、書き方を。

if(真偽値){
    // 真偽値がtrueなら行う処理
}

さて、いきなり真偽値というものが出てきたが、これは後で解説する。

いったん、このif文の動き方を見ていこう。

まず、真偽値というものの状態を確認する。

これが、trueという値であれば、中括弧内の処理を行ってくれる。

この真偽値にはもう一つfalseという値があり、この場合は処理が行われない。

これで、条件によって処理を分岐させることができる。

…と書いたが、やはり真偽値が分からないと先には進めない。

というわけで、その真偽値について解説をしていこう。

真偽値

真偽値とは、データの型の一つだ。

変数に入れることができるものの一つでもある。

これは、以下二種類の値だけを持つ。

  • true
  • false

簡単に言ってしまえば、YESorNOだ。

これを直接プログラムの中に書く場合は、そのままtruefalseと書いてくれれば大丈夫。

試しに、変数に入れてvar_dumpで表示してみよう。

<?php
    $var = true;
    var_dump($var);
?>

これで画面にアクセスすると、以下のように表示される。

bool(true)

以前紹介したサンプルは配列だったが、変数一つの場合はこのように表示される。

先頭のboolというのが、真偽値を表す型

その後ろの括弧に、その値が入っている。

今回は、trueを入れていたので、そのまま表示されているというわけだ。

もちろん、falseを代入したら結果もbool(false)となる。

…と書いてきたが、プログラム上でこの真偽値が直接書かれることは少ない

どういうことかというと、これは何らかの比較の結果や、処理の結果として出てくるのだ。

処理の方は追々解説するとして、今回は比較の方を深掘りしていこう。

真偽値を返す比較演算子

比較演算子とはその名の通り、二つのデータを比較して、その関係と演算子によってtrueもしくはfalseを返すもののこと。

基本的なものは6つあり、一覧で出してしまおう。

比較演算子意味
==両辺が等しい場合にtrue、異なる場合にfalseを返す
!=両辺が異なる場合にtrue、等しい場合にfalseを返す
>左辺が右辺より大きい場合にtrue、その他はfalseを返す
>=左辺が右辺以上の場合にtrue、その他はfalseを返す
<=左辺が右辺以下の場合にtrue、その他はfalseを返す
<左辺が右辺より小さい場合にtrue、その他はfalseを返す
比較演算子一覧

このような感じだ。

例えば、変数$numに100が入っていたとしたら、$num == 100と書けばこれら全体がtrueに置き換わる。

この、一つ目のイコールは二つあることに注意。

一つだと代入の意味だった。

数が変わるだけで意味が全然違うものになるので、気を付けよう。

その他の注意点として、大小比較

イコールが入っているものは、両方が等しくてもtrueになる

イコールが入っていないものは、両方が等しかったらfalseになるので、これも気を付けよう。

さて、ここでクイズ。

以下のように書いた場合、最後の$resには何が入っているだろうか。

<?php
    $num = 100;
    $res = $num == "100";
    var_dump($res);
?>

何を聞きたいかというと、数字の100文字列の100を比較したとき、trueとなるか、falseとなるかだ。

答えは、trueとなる。

PHPでは、このように型が違っても比較を行ってくれる

…が、この型まで合っているか確認したい場合もある。

もちろん、それを含めて比較してくれるような比較演算子も存在する。

それが、以下二つだ。

比較演算子意味
===型まで含めて、左右が同じならtrue、異なればfalseを返す
!==左右の値、型が異なればtrue、型と値も同じならfalseを返す
型も見る比較演算子

イコールがさらに追加された。

より厳密に見る場合はイコールが増える、と考えると覚えやすいと思う。

真偽値の演算を行う論理演算子

ここまでの内容で、条件一つだけの場合はtruefalseの真偽値に直すことができるようになった。

しかし、実際には、条件Aかつ条件Bや、条件1または(条件2かつ条件3)といったような、複数の条件を見たい場合もある。

一応if文を組み合わせればできないこともないが、非常に面倒だ。

というわけで、複数の真偽値を組み合わせて、最終的に一つの真偽値を出すような演算子も用意されている。

それが、論理演算子だ。

これには三つあり、以下の通り。

論理演算子書き方意味
&&真偽値1 && 真偽値2真偽値1と真偽値2がtrueの場合のみtrue
その他はfalse
||真偽値1 || 真偽値2真偽値1または真偽値2がtrueの場合はtrue
両方ともfalseの場合のみfalse
!!真偽値真偽値がtrueならfalse
真偽値がfalseならtrue
論理演算子

これを使えば、例えばある数値が○○以上△△以下といった書き方も簡単にできる。

例えば、ちょっと複雑な条件を考えてみる。

  • 二つのクラス1, 2がある。
  • クラス1は上位クラスで、テストの得点が80点以上なら合格
  • クラス2は下位クラスで、テストの得点が60点以上なら合格

こんな条件だったとしよう。

クラスの数字は変数$classに、テストの得点は$scoreに入っているとする。

これで、合格時にtrueとなるよう比較演算子論理演算子を組み合わせてみよう。

まずはクラス1の条件から見ていこう。

クラスが1であることは、$class == 1で表せる。

得点が80点以上は、$score >= 80だ。

これは両者ともtrueであればOKなので、こちらの条件は、$class == 1 && $score >= 80だ。

では、次にクラス2の条件。

同じように、クラスが2であることは$class == 2、得点が60点以上であることは$score >= 60で表せる。

これを&&で結んで、$class == 2 && $score >= 60でこちらの条件が完成だ。

最後に、このどちらかがtrueになっていればOKなので…

$class == 1 && $score >= 80 || $class == 2 && $score >= 60

で条件の完成だ。

なお、&&||では、&&の方が優先度が高い。

だから、上の例だと先に両側の&&が計算され、最後に中央の||が計算されるという順番になる。

先に||を計算させたい場合は、その箇所を小括弧で囲もう。

例えば、条件1 && ( 条件2 || 条件3 )のような感じだ。

if文と比較演算子の使用例

ここまで解説してきた比較演算子論理演算子だが、返ってくるのは真偽値だった。

そして、if文の条件分岐に使うのも真偽値

というわけで、これらを組み合わせてあげよう。

例えば、以下のプログラム。

<?php
    $num = 10;
    if($num <= 10){
        echo "数値は10以下です。";
    }
?>

このように書けば、変数$numに入っている数字が10以下の場合にだけ文字列が表示されるようになる。

$numの値を色々と変化させて、表示がされるかどうかを見てみよう。

else if文とelse文

上に書いたif文条件分岐はできるようになった。

しかし、もうちょっと複雑になってくると、条件の一つ目に当てはまらず、別の条件に当てはまる場合、といった場合分けがしたい場面が出てくる。

そんなときに使えるのがelse if文だ。

先に書き方を。

if(条件1){
    // 条件1がtrueになった場合に行う処理
}else if(条件2){
    // 条件1がfalseかつ条件2がtrueになった場合に行う処理
}else if(条件3){
    // ここまで全てfalseで、条件3がtrueになった場合に行う処理
}else if(条件4){
...
}

ここに書いた通りだが、if文の中括弧の後ろにelse ifでさらに条件を書くことができる

そうすると、そこまでの条件が全てfalseだった場合かつ、そこの条件がtrueの場合に行う処理というのが書けるようになる。

これはいくつでもつなげることができるが、一度trueになったら、それ以降は条件すら見られなくなる

さらにもう一つ、else文というものがある。

これは、それまでの条件が全てfalseだった場合の処理だ。

書き方は以下の通り。

if(条件1){
    // 条件1がtrueになった場合に行う処理
}else if(条件2){
    // 条件1がfalseかつ条件2がtrueになった場合に行う処理
}else if(条件3){
    // ここまで全てfalseで、条件3がtrueになった場合に行う処理
}else if(条件4){
...
}else{
    // ここまで全てfalseだった場合に行う処理
}

ここまで全てと書いたが、else ifがなくてもelse文は書ける

sample13.phpを書き換えて、これらのelse if文else文も使ってみよう。

<?php
    $num = 10;
    if($num <= 10){
        echo "数値は10以下です。";
    }else if($num <= 20){
        echo "数値は10より大きく、20以下です。";
    }else{
        echo "数値は20より大きいです。";
    }
?>

こうすれば、数値によって必ずどこかが実行されるようになる。

こちらも、$numの値を色々変えて試してみよう。

おわりに

今回は、条件分岐を行うif文else if文else文と、その条件に使う比較演算子論理演算子を解説してきた。

条件によって行う処理を変える、というのはプログラミング全般でほぼ常に使う考え方だ。

今回の内容は基本的にどの言語でも共通した考え方なので、しっかり身に付けておこう。

次回は、繰り返し処理を解説する。

これも、非常によく使う内容だ。

今回出てきた真偽値の考え方を使うので、不安な方は復習しておいてほしい。

コメント

タイトルとURLをコピーしました