@ PHP

operator:演算子

PHPでも、他のプログラム開発言語と同様に、簡単な計算から、複雑な科学計算まで可能です。
そうした計算の元となるのが「演算子」です。 一言で演算子といっても、多種多様です。
PHPでは簡単な足し算や引き算などのような加減乗除の演算子、あるいは比較演算子、論理演算子など、利用できる多く演算子が用意されています。

代入演算子

変数にデータを入れることを代入と呼びます。その代入のための記号「=」をプログラムでは、代入演算子と呼びます。

operator_01.php

<?php
$a = "Hello World";
echo '$aに代入されている値は'.$a."です。";
?>

代数演算子(算術演算子)

四則演算を行うための演算子は、「代数演算子」または「算術演算子」と呼ばれています。四則演算プログラムでは欠かせない演算子です。

演算子 働き
A+B AとBを足す
A-B AからBを引く
A*B AとBを掛ける
A/B AをBで割る
A%B AをBで割ったときに出る余り

operator_02.php

<?php
  $x = 10;
  $y = 3;
  
  $value = $x + $y;
  echo "$value<br>\n";
  $value = $x - $y;
  echo "$value<br>\n";
  $value = $x * $y;
  echo "$value<br>\n";
  $value = $x / $y;
  echo "$value<br>\n";
  $value = $x % $y;
  echo "$value<br>\n";
?>

加算子(++)、減算子(- -)

変数に1を足したり(インクリメント)、1を引いたり(デクリメント)するときに使います。
よく使うのは、カウンターでの用途です。 前後どちらにつけても結果に違いはjありません。
加算子、減算子を変数の前につけるか、後ろにつけるかによって、計算する過程に違いがあります。

演算子 働き(A=10のとき)
A++ Aの値をAに代入し(10)、(A+1)する(11)
A- – Aの値をAに代入し(10)、(A-1)する(9)
++A (A+1)し(11)、その後Aに値を代入する(11)
– -A (A-1)し(9)、その後Aに値を代入する(9)

operator_03.php

<?php
$a = 1;
echo "はじめは".$a."でした。<br>\n";
$a++;
echo "1増えて".$a."になりました。<br>\n";
$a--;
echo "1減って".$a."になりました。<br>\n"
?>

$a++と++$aの違い

前置きと後置きでは演算を行うタイミングが異なり、前置きの場合は変数の参照より先に、後置きの場合は変数の参照より後に演算が行われます。

operator_04.php

<?php
$a = 1;
$b = 1;
echo "前置きだと";
echo (++$a);
echo "になります。<br>\n";
echo "後置きだと";
echo ($b++);
echo "になります。";
?>

複合演算子(+=、-=、*=、/=、%=)

複合演算子は代数演算子と代入演算子との組み合わせで動作する、代数演算子の省略形です。1度使うとなんとなく癖になって使いたくなる、不思議な演算子です。

演算子 働き
A+=B A=A+B  足し算
A-=B A=A-B  引き算
A*=B A=A*B  掛け算
A/=B A=A/B  割り算
A=A/B  割り算 A=A%B  割り算の余り

operator_05.php

<?php
$x = 10;

$x += 3;
echo "$x<br>\n";
$x -= 3;
echo "$x<br>\n";
$x *= 3;
echo "$x<br>\n";
$x /= 3;
echo "$x<br>\n";
$x %= 3;
echo "$x<br>n";
?>

比較演算子(==、!=、<、> 、<=、>=)

比較演算子は、左辺と右辺の値を比較する演算子です。
代入演算子の「=」と比較演算子の「==」は違うものですので、混同しないよう注意しましょう。

演算子 働き
A==B AとBの値が等しいときTRUE
A===B AとBの値と型が両方等しいときTRUE
A!=B AとBの値が等しくないときTRUE
A!==B AとBの値と型が等しくないときTRUE
A<>B AとBの値が等しくないときTRUE
A<B AがBの値未満のときTRUE
A<=B AがBの値以下のときTRUE
A>B BがAの値未満のときTRUE
A>=B BがAの値以下のときTRUE

operator_06.php

<?php
// AとBの値が等しいときTRUE
echo 1 == "1";
// AとBの値と型が両方等しいときTRUE
echo 5 === 5;
// AとBの値が等しくないときTRUE
echo 3 != 7;
// AとBの値か型が等しくないときTREU
echo "11" !== 11;
// AとBの値が等しくないときTRUE
echo 100 <> 101;
// AがBの値未満のときTRUE
echo 20 < 21;
// AがBの値以下のときTRUE
echo 1.2 <= 1.2;
// BがAの値未満のときTRUE
echo 2.0 > 1.9;
// BがAの値以下のときTRUE
echo 4 >= 3;
?>

不動少数点数の比較

不動少数点数は内部で2進数として扱われるため、厳密な演算には不向きです。

不動小数点数の比較には、以下のような方法を使います。

operator_07.php

<?php
CONST EPSILON = 0.00001;
$x = 0.123456;
$y = 0.123455;
var_dump(abs($x - $y) < EPSILON);
?>

定数 EPSILON は、誤差の許容範囲を表します。計算機イプシロン、丸め単位などと呼ばれます。

上記の例では、小数点第5位までの制度を保証します。

論理演算子(and、or、!、&&、||)

論理演算子は左辺と右辺の条件式の結果を評価する演算子です。
「どちらも正しいとき」あるいは「どちらかが正しいとき」というような式を作りたいときに使います。

論理演算概念図

演算子 働き
A && B A式もB式もTRUEのときTRUE
A || B A式かB式がTRUEのときTRUE
A and B A式もB式もTRUEのとき(&&よりも優先順位が低い)にTRUE
A or B A式かB式がTRUEのとき(||よりも優先順位が低い)にTRUE
A xor B A式かB式がどちらか片方のみがTRUEのときTRUE(片方はFALSE)
!A A式がTRUEでないときTRUE

operator_08.php

<?php
$x = 10;
$y = 3;

echo ($x == 10) && ($y == 3);
echo ($x ==10) || ($y == 8);
echo ($x ==10) and ($y == 3);
echo ($x == 2) or ($y == 3);
echo ($x == 4) xor ($y == 3);
echo !($x == 5);
echo ($x == 10) && ($y == 3) && ($x*$y == 30);
?>

文字列結合演算子(.)

文字列結合演算子は、左辺と右辺の文字列を結合する演算子です。
JavaScriptなどではプラス(+)で文字列を結合できますが、PHPではドット(.)を文字列結合演算子として使います。

operator_09.php

<?php
$username = 'taro';
$domain = '@example.com';
// 普通の方法で $username と $domein を結合する
$username = $username . $domain;
// 組み合わせ演算子を使って結合する
$username .= $domain;

print $username;
?>