前回は、アクセス時に送られてきたデータを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文と、その条件に使う比較演算子、論理演算子を解説してきた。
条件によって行う処理を変える、というのはプログラミング全般でほぼ常に使う考え方だ。
今回の内容は基本的にどの言語でも共通した考え方なので、しっかり身に付けておこう。
次回は、繰り返し処理を解説する。
これも、非常によく使う内容だ。
今回出てきた真偽値の考え方を使うので、不安な方は復習しておいてほしい。


コメント