前回は、アクセス時に送られてきたデータをPHPで受け取る、ということを解説した。
細かいGETとPOSTの違いなどについてはまだ解説しておらず、別途解説をするつもりだ。
待てない、という方は先に調べてみよう。
前回の記事は以下だ。
【PHP講座05】HTMLのフォームから値を受け取ろう | Shino’s Mind Archive
さて、今回はまたPHP単独の内容に移る。
タイトルにある通り、条件分岐を行うif文を解説していく。
ここも基本中の基本なので、しっかりマスターしていこう。
なお、次回解説する繰り返し処理にも今回の内容を使うので、そういった意味でも確実に進めていきたい。
条件分岐を行うif文
プログラミングでほぼ必ずと言っていいほど、この条件分岐というものが出てくる。
これは、データの中身が○○だったらこの処理を行う、といった考え方だ。
では、書き方を。
if(真偽値){
// 真偽値がtrueなら行う処理
}
さて、いきなり真偽値というものが出てきたが、これは後で解説する。
いったん、このif文の動き方を見ていこう。
まず、真偽値というものの状態を確認する。
これが、true
という値であれば、中括弧内の処理を行ってくれる。
この真偽値にはもう一つfalse
という値があり、この場合は処理が行われない。
これで、条件によって処理を分岐させることができる。
…と書いたが、やはり真偽値が分からないと先には進めない。
というわけで、その真偽値について解説をしていこう。
真偽値
真偽値とは、データの型の一つだ。
変数に入れることができるものの一つでもある。
これは、以下二種類の値だけを持つ。
- true
- false
簡単に言ってしまえば、YESorNOだ。
これを直接プログラムの中に書く場合は、そのままtrue
やfalse
と書いてくれれば大丈夫。
試しに、変数に入れて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を返す |
イコールがさらに追加された。
より厳密に見る場合はイコールが増える、と考えると覚えやすいと思う。
真偽値の演算を行う論理演算子
ここまでの内容で、条件一つだけの場合はtrue
、false
の真偽値に直すことができるようになった。
しかし、実際には、条件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文と、その条件に使う比較演算子、論理演算子を解説してきた。
条件によって行う処理を変える、というのはプログラミング全般でほぼ常に使う考え方だ。
今回の内容は基本的にどの言語でも共通した考え方なので、しっかり身に付けておこう。
次回は、繰り返し処理を解説する。
これも、非常によく使う内容だ。
今回出てきた真偽値の考え方を使うので、不安な方は復習しておいてほしい。
コメント