【PHPの基礎知識③】演算子
代数演算子
代数演算子は加算、減算などの計算をするときに使用します。
+ | 加算 |
- | 減算 |
* | 乗算 |
/ | 除算 |
% | 剰余 |
処理で実際に行われる四則演算は、単純な計算以外に、日付の計算、各種サイズの計算、単位の変換などがあります。以下の使用例は演算子の使い方がわかるだけではなく、処理のヒントにもなりますので、いくつか見てみましょう。
使用例
- 単純な計算$int = 3 + 5; → $intに8をセット
右辺の計算結果が左辺に代入されます。
- 変数値を加算する$int = $int + 5; → $intに5を加算
右辺の計算結果が左辺に代入されるので「$int+5」が変数$intに代入、よって変数$intに5が加算されます。
- センチをポイントに変換する$point = $cm / 2.54 * 72;
単位の変換を行う計算は、簡単なもので10倍したり、10で割るなどがありますが、この例はPDFの作成処理などで使う計算式の例です。PDFでは、作成するページサイズや座標をポイントで指定します。ポイントは通常の解像度では1/72インチです。インチやポイントでサイズがイメージできないときはセンチでサイズを指定してポイントに変換するとわかりやすくなります。(1インチ=2.54cm)
- 1行ごとに異なる色をセットする$color = ($line_no % 2) == 1 ? $color : $color2;
剰余を求める「%」の活用例です。剰余の規則性を処理活用することができます。
代入演算子
代入演算子は、右辺の値を左辺に代入します。右辺の値をコピーすることと、参照を設定する役割があります。
使用例
- 文字列を代入する$str = "あいうえお";
- 文字列への参照を設定する$str = "あいうえお";
$str2 = &$str; →$strへの参照をセット右辺に「&」をつけて「 = &$str」のように記述すると、変数への参照を代入できます。
- 変数を加算する$int = 1;
$int += 5; →$intに「6」を格納代入演算子と代数演算子と共に使って計算式を記述することができます。上の例で「$int += 5」は「$int = $int + 5」と同じ意味となります。
ビット演算子
ビット演算子は、データを構成する各ビットの値を操作します。
& | ビット積 |
| | ビット和 |
^ | 排他的論理和 |
~ | 否定 |
<< | 左シフト |
>> | 右シフト |
使用例
- 数値のビット積を求める$result = 111 & 100; →100
- 数値のビット和を求める$result = 10 | 1; →11
- 数値の排他的論理和を求める$result = 101 ^ 11; →110
- 数値のビットを反転する$result = - 11; →-12
- 数値を左に2ビットシフトする$result = 100 << 2; →400
- 数値を右に2ビットシフトする$result = 100 >> 2; →25
比較演算子
比較演算子は、値を比較します。左辺と右辺を比較し真偽を問う演算子や、3項演算子と呼ばれる演算子があります。
== | 左辺が右辺と等しいときはTRUE |
=== | 左辺が右辺と等しく同じデータ型の時はTRUE |
!= | 左辺と右辺が等しくないときはTRUE |
<> | 左辺と右辺が等しくないときはTRUE |
!== | 左辺が右辺と等しくないか、同じデータ型でないときはTRUE |
< | 左辺が右辺より小さいときはTRUE |
> | 左辺が右辺より大きいときはTRUE |
<= | 左辺が右辺より小さいか等しい時はTRUE |
<= | 左辺が右辺より大きいか等しい時はTRUE |
式1 ? 値1 : 値2 | 式1がTRUEの時は値1、それ以外は値2 |
使用例
- 2つの値を比較する$int = 10;
$str = "10";
if ($int == $str) { ... →TRUE - 2つの値のデータ型を比較する$int = 10;
$str = "10";
if ($int === $str){... →FALSE「===」による」比較は値とデータ型の比較です。この例では数値と文字列を比較しているのでFALSEとなります。
- 3項演算子の使用例$int = 20;
$result = $int >= 10 ? "10以上" : "10未満";
echo $result; →10以上3項演算子を使って式がTRUEかFALSEかで異なる値を変数にセットしています。
エラー制御演算子
エラー制御演算子「@」はエラーメッセージを出力させたくないときに使います。特定の関数の前に「@」を付加することで、その関数の実行に伴うエラーメッセージは表示されなくなります。
使用例
- ファイルオープンエラーを非表示にする$fp = @fopen("not.txt", "r");
- データベース接続エラーを非表示にする$conn = @mysql_connect("not");
エラー制御演算子「@」が使われる典型的な例はファイルやデータベースを扱うときです。ファイルが開けない、データベースに接続できない場合にエラーメッセージを報じすることは開発中は役立ちますが、システムの本稼働中にユーザーが見ても役立つとは言えません。また、どのファイルにアクセスしようとしているかなど、情報を得ようとしている悪意のあるユーザーに情報を与えてしまうことも考えられます。このようなときは「@」でエラーメッセージを制御します。
加算子・減算子
加算子「++」や減算子「--」は、変数に1加算したり、1減算したりするときに使います。
使用例
- ループカウンタを1加算するfor ($i = 1; $i <=5, $i++) {...
加算子を使った例でよく使われるのは、ループカウンタの加算「$++」で、変数$iを1加算します。
- 前置加算子を使用する$int = 0;
$int2 = ++$int; →この時点で$intは「1」
echo $int2; →「1」を出力
echo $int; →「1」を出力
- 後置加算子を使用する$int = 0;
$int2 = $int++; →この時点で$intはまだ「0」
echo $int2; →「0」を出力
echo $int; →「1」を出力
このように前置加算子を使って「++$int」のように変数値を加算するとすぐに値は変更されますが、後置加算子「$int++」では元のままです。次の減算子も同じように動作します。
- 前置減算子を使用する$int = 10;
$int2 = --$int; →この時点で$intは「9」
echo $int2; →「9」を出力
echo $int; →「9」を出力 - 後置減算子$int = 10;
$int2 = $int--; →この時点では$intはまだ「10」
echo $int2; →「10」を出力
echo $int; →「9」を出力
実行演算子
実行演算子はコマンドを実行するときに使います。バッククォーテーション「`」で囲まれたコマンドが実行されます。
- dirコマンドを実行するecho `dir c:\file`;
c:\file のファイル一覧を表示するdirコマンドを実行します。
論理演算子
論理演算子は、値の論理演算をするもので、if文など条件分岐する場面でよく使われます。「aかつb」という条件をのときは「and」や「&&」、「aまたはb」という条件のときは「or」や「||」、「aではない」という条件のときは「!」が使われます。
<論理演算子>
and | 論理積 |
or | 論理和 |
! | 否定 |
&& | 論理積 |
|| | 論理和 |
xor | 排他的論理和 |
使用例
- and演算子を使用する$a = 10;
$b = 5;
if ($a != $b and $a > $b ) { ...and演算子は論理積(xかつy)を求めるものです。&&演算子も論理積を求めるものなので「and」を「&&」に置き換えて次のように記述できます。
- &&演算子を使用するif($a != $b && $a > $b) { ...
- or演算子を使用するif($a < 20 or $a > 50) { ...
or演算子は論理和(xまたはy)を求めるものです。||演算子も論理和を求めるものなので「or」を「||」に置き換えて次のように記述できます。
- ||演算子を使用するif($a < 20 || $a > 50) { ...
- !演算子を使用するif(!$a < 0) { ...
!演算子は「xではない」という条件のときに使うことができます。
文字列演算子
文字列演算子は2つの文字列を結合します。
使用例
- 文字列を結合するecho "abc"."123"; →「abc123」を出力
- 文字列と数値を結合する$int = 123;
echo $int . "円"; →「123円」を出力結合演算子の対象に数値が指定されていても、PHPによって自動で型変換され文字列として結合されます。
- 文字列を加える$str = "SELECT * FROM table1 where";
$str .= " f1 = 1"; →$strに「SELECT * FROM table1 where f1 = 1」をセット結合演算子を代入演算子と共に使い、「.=」とすると最初の文字列に文字列を加えることができます。
配列演算子
配列演算子「+」は、配列を結合します。
使用例
- 配列を結合する$array1 = array("mon" => "月", "tue" => "火");
$array2 = array("wed" => "水", "thu" => "木");
print_r($array1 + $array2);
→「Array([mon]=>月 [tue]=>火 [wed]=>水 [thu]=>木)を出力配列演算子「+」で配列を結合しています。重複するキーは上書きされないので、次のように値だけ指定した指定した配列の結合では最初の配列の値が残ります。
- 重複するキーを持つ配列を結合する$array1 = array("月","火");
$array2 = array("水","木");
print_r($array1 + $array2); →「Array([0]=>月 [1]=>火)」を出力