前回はPHPの変数の定義について説明しました。
変数を定義したらそれを元に値を計算したり比較したりし、プログラムを組み立てていきます。
イメージはこれも中学校の数学です。
かなり理系脳な話になるので、数学が苦手な方はちょっと難しい話になるかもしれません。
でも慣れれば中学の連立方程式より簡単です。
算術演算子
算術演算子は、足し算など普通の計算を行う演算子です。
プログラムには文字列の場合もあるので少し特殊です。
足し算(+)
$a = 1 + 1; // $a には2が入ります。 $b = $a + 1; // $b には3が入ります。 $c = $a + $b; // $c には5が入ります。 $d = "1" + $c; // $d には6が入ります。
足し算を行う演算子です。
PHPの場合、文字列に数値が含まれている場合は数値として計算します。
これはPHPの特殊な有り難迷惑な機能です。
使えるときは便利ですが、バグを増やさないように多様しないことをお勧めします。
文字列結合(.)
$a = "8" + "3"; // $a には11が入ります。
上の計算では、$a には11が入ります。
PHPの場合、文字列の場合でも値が数値の場合は正常に計算が出来てしまいます。
ではその場合文字列の結合はどのように行うのか?
上の計算を行った結果が”83″になるようにするにはどのように書けばよいのか。
$a = "8" . "3"; // $a には83が入ります。
文字列の結合には . (ドット)を使います。
引き算(-)
$a = 1 - 1; // $a には0が入ります。 $b = $a - 1; // $b には-1が入ります。 $c = $a - $b; // $c には1が入ります。 $d = "1" - $c; // $d には0が入ります。
引き算を行う演算子です。
引き算の場合も文字列の”1″から 1 を引いた場合は0になります。
掛け算(*)
$a = 2 * 2; // $a には4が入ります。 $b = $a * 2; // $b には8が入ります。 $c = $a * $b; // $c には32が入ります。 $d = "2" * $c; // $d には64が入ります。
掛け算を行う演算子です。
× ではなく * を使います。
こちらも足し算同様で、文字列の掛け算はちゃんと掛け算してくれます。
けど文字列の計算はあまり使わないほうが・・・。
割り算(/)
$a = 2 / 2; // $a には1が入ります。 $b = $a / 2; // $b には0.5が入ります。 $c = $a / $b; // $c には2が入ります。 $d = "2" / $c; // $d には1が入ります。
割り算を行う演算子です。
剰余算(%)
$a = 5 % 3; // $a には2が入ります。 $b = 3 % $a; // $b には1が入ります。
これは余りを求める演算子です。
これはめったに使いませんが、使う場面が出てきたときには非常に便利です。
代入演算子
$a = $a + 1;
左辺に変数を書き、= で繋ぎ、右辺に左辺へ代入する値を計算します。
この = が代入演算子です。
プログラミングには下記のような代入演算子もあり非常に便利です。
$a = 1; // $a には1が入ります。 $a += 1; // $a には2が入ります。
2行目では $a = $a + 1; と同じ計算がされます。
足し算以外でも使えます。
$a = 3; // $a には3が入ります。 $a -= 1; // $a には2が入ります。 $a = 3; // $a には3が入ります。 $a *= 2; // $a には6が入ります。 $a = 4; // $a には4が入ります。 $a /= 2; // $a には2が入ります。
文字列の場合もドットで文字列を連結することが出来ます。
$a = "abc"; // $a には"abc"が入ります。 $a .= "de"; // $a には"abcde"が入ります。
となります。
単項演算子
インクリメント
インクリメントは変数の値に 1 を足すものです。
ループ処理などで、何回ループしたかをカウントしたりするのに便利です。
$a = 0; echo $a++; // 0が表示されます。 echo $a; // 1が表示されます。 $b = 0; echo ++$b; // 1が表示されます。
$a++ (接尾辞インクリメント)は、その行の処理内で後に計算がされます。
++$a (接頭辞インクリメント)は、その行の処理内で先に計算がされます。
ただ、下のコードのように行を分けてしまえば同じ結果になります。
$a = 0; $a++; echo $a; // 1が表示されます。 $b = 0; ++$b; echo $b; // 1が表示されます。
デクリメント
デクリメントは変数の値に 1 を引くものです。
ループ処理などで、予めループ回数を制限し0になったら処理を停止する場合などに使えます。
$a = 1; echo $a--; // 1が表示されます。 echo $a; // 0が表示されます。 $b = 1; echo --$b; // 0が表示されます。
$a– (接尾辞デクリメント)は、その行の処理内で後に計算がされます。
–$a (接頭辞デクリメント)は、その行の処理内で先に計算がされます。
ただ、下のコードのように行を分けてしまえば同じ結果になります。
$a = 1; $a--; echo $a; // 0が表示されます。 $b = 1; --$b; echo $b; // 0が表示されます。
比較演算子
比較演算子は二つの値を比較するために使います。
== (等しい)
$a = 1; $b = 1; var_dump ($a == $b); // true $a = 1; $b = 2; var_dump ($a == $b); // false
2つの値が同じかどうかを判定し、同じならば true を返します。
> (より大きい)
$a = 1; $b = 1; var_dump ($a > $b); // false $a = 1; $b = 0; var_dump ($a > $b); // true
2つの数値の大きさを比較し、左辺の値が大きければ true を返します。
右辺のほうが大きい場合、同じ値の場合は false を返します。
>= (より大きいか等しい)
$a = 1; $b = 1; var_dump ($a >= $b); // true $a = 1; $b = 2; var_dump ($a >= $b); // false $a = 1; $b = 0; var_dump ($a >= $b); // true
2つの数値の大きさを比較し、左辺の値が大きければ true を返します。
同じ値の場合は true を返します。
右辺のほうが大きい場合は false を返します。
!= (等しくない)
$a = 1; $b = 1; var_dump ($a != $b); // false $a = 1; $b = 0; var_dump ($a != $b); // true
2つの値が同じかどうかを判定し、異なれば true を返します。
< (より小さい)
$a = 1; $b = 1; var_dump ($a < $b); // false $a = 1; $b = 2; var_dump ($a < $b); // true
2つの数値の大きさを比較し、右辺の値が大きければ true を返します。
左辺のほうが大きい場合、同じ値の場合は false を返します。
<= (より小さいか等しい)
$a = 1; $b = 1; var_dump ($a <= $b); // true $a = 1; $b = 2; var_dump ($a <= $b); // true $a = 1; $b = 0; var_dump ($a <= $b); // false
2つの数値の大きさを比較し、右辺の値が大きければ true を返します。
同じ値の場合は true を返します。
左辺のほうが大きい場合は false を返します。
===(値も型も等しい)
$a = "123"; var_dump($a === "123"); // true var_dump($a === 123); // false
値だけでなく型も比較する演算子です。
上の例のように文字列の”123″と数値の123は別物として扱われます。
ちなみに == で判定すると true になります。
!==(値もしくは型が異なる)
$a = "123"; var_dump($a !== "123"); // false var_dump($a !== 123); // true
値だけでなく型も比較する演算子です。
=== の否定形です。
ちなみに != で判定すると false になります。
instanceof(型演算子)
$a = "2018/9/24"; $b = new DateTime(); var_dump($a instanceof DateTime); // false var_dump($b instanceof DateTime); // true
これは型を判定する演算子です。
文字列で日付っぽい値を用意してもオブジェクトの型が違うので別物になります。
論理演算子
&& (AND)

$a = true && true; // a には true が入ります。 $b = true && false; // b には false が入ります。 $c = false && true; // c には false が入ります。 $d = false && false; // d には false が入ります。
事象Aと事象Bがあった場合、AとBが重なる部分だけが true となります。
サンプルコードの中だと両方 true のものだけが true になります。
例えば、$age (年齢)と、$carLicense (車の免許を持ってる場合は true) があったとします。
$age >= 18 $$ $carLicense
この場合 $age >= 18 と $carLicense が両方 true で無いと車を運転してはいけません。となります。
|| (OR)

$a = true || true; // $a には true が入ります。 $b = true || false; // $b には true が入ります。 $c = false || true; // $c には true が入ります。 $d = false || false; // $d には false が入ります。
事象Aと事象Bがあった場合、AもしくはBが当てはまる場合 true となります。
! (NOT)

$a = !true; // $a には false が入ります。 $a = !false; // $a には true が入ります。
事象Aがあった場合、事象Aで無い場合が true になります。
!false と書くなら最初から true だけ!にしたほうがいいですが、 !false は事象Aに当てはまる場合になります。

まとめ
比較演算子はプログラムを書く上で必須です。
慣れてきても「あれ?あれ?」と思うことは多々ありますが、今回紹介したものはしっかり覚えておく必要があります。
PHPの場合は型がちょっと曖昧な気がします。
特に文字列で数値を扱う場合には注意しましょう。










コメント