UPDATE:2020年07月03日
PHP の 演算子
- PHPの演算子は値(オペランドまたは式)を操作して別の値を生成する
- 値:例えば 1 という値は 1 という値を持つ式のこと
- 式:式とは値があるもののこと
- 最も簡単な式はリテラル値 定数 変数
- オベランド:演算の対象となる値や変数のこと
- リテラル:リテラルとは値そのもののこと
- 演算子は単項演算子 二項演算子 三項演算子の3分類
- 演算子は計算の優先順位がある
演算子とは
- PHPの演算子は値(オペランドまたは式)を操作して別の値を生成する
- 値:例えば 1 という値は 1 という値を持つ式のこと
- 式:式とは値があるもののこと。最も簡単な式はリテラル値 定数 変数
- オベランド:演算の対象となる値や変数のこと
- リテラル:リテラルとは値そのもののこと。プログラム内でそのままの形で現れます。例えば「2011」「'hello'」など。
演算子とは、1つ以上の「値」(オペランドまたは式)を受け取り、操作(足したり、引いたり)を行い、別の値を生み出すもののことです。
例えば、演算子を使用した式は以下のようなものです。
1 2 3 4 | <!-- サンプルコード --> <?php $i = 1 + 2; ?> |
1 という値と 2 という値を「+(加算演算子)」で加算して 3 という値を生み出します。生成した 3 という値を「=(代入演算子)」で 変数 $i に代入しています。
$i を echo で出力すればブラウザに 3 と表示されます。
1 2 3 4 5 | <!-- サンプルコード --> <?php $i = 1 + 2; echo $i; ?> |
結果は
となります。
演算子の分類
- 演算子は 単項演算子 二項演算子 三項演算子 の3分類
演算子は、受け取る値(オペランド)の数によって分類することができます。
単項演算子
単項演算子は、1つの値(オペランド)だけを受け取るもので、「! (論理否定演算子)」 や 「++ (加算子)」 などです。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $i = 1; $i++; echo $i; ?> |
結果は
となります。
二項演算子
二項演算子は、2つの値(オペランド)を受け取ります。代数演算子 である「+ (加算)」や 「- (減算)」 などです。 PHPの殆どの演算子はこの二項演算子です。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $i = 1 + 2; $i; echo $i; ?> |
結果は
となります。
三項演算子
三項演算子は、3つの値(オペランド)を受け取るります。三項演算子は「 ? : 」のみです。三項演算子はその働きから条件演算子というほうが適切です。
1 2 3 4 | <!-- サンプルコード --> <?php echo (1) ? 'TRUE' : 'FALSE'; ?> |
結果は
となります。
演算子の種類
種類 | 説明 |
算術演算子(代数演算子) | 算術演算子(代数演算子)は「足す」「引く」「掛ける」「割る」「余り」 |
---|---|
代入演算子 | 代入演算子は変数に値を代入したり、変数の値を更新する |
ビット演算子 | ビット演算子は、整数値をビット値で演算 ビットはコンピュータが処理する最小単位 |
比較演算子 | 比較演算子は左右のオペランドを比較する 結果と「true(真)」「false(偽)」で返す |
加算子(インクリメント演算子)・減算子(デクリメント演算子) | 加算子/減算子は値を1ずつ増減 |
文字列演算子 | 文字列演算子は結合と結合代入の2種類 |
論理演算子 | 論理演算子は論理値を評価し論理値を返す |
キャスト演算子 | キャスト演算子は右辺オペランドのデータ型を指定した型にする |
エラー制御演算子 | エラー制御演算子 @ を式の前に付けると式のエラーは無視される |
実行演算子 | PHPは実行演算子「“(バッククォート)」をサポート |
条件演算子(三項演算子) | (条件式) ? 真の場合の式 : 偽の場合の式; |
配列演算子 | 配列演算子は配列を統合したり比較したりする |
算術演算子(代数演算子)
算術演算子(代数演算子)は一般的な計算「+(足す)」「-(引く)」「*(掛ける)」「/(割る)」「%(余り)」を行うものです。計算の優先順位や結合時の評価は以下の表を確認して下さい。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
+ | 加算 | 2 | left | $a + $b | $a および $b の和 |
– | 減算 | left | $a – $b | $a と $b の差 | |
* | 乗算 | 1 | left | $a + $b | $a および $b の積 |
/ | 除算 | left | $a / $b | $a および $b の商 | |
% | 剰余 | left | $a % $b | $a を $b で割った余り |
代入演算子
代入演算子は変数に値を代入したり、変数の値を更新する演算子です。
代表的な代入演算子は「=(イコール)」です。これは、左辺オペランドに右辺オベランドの式の値を代入(式の値を得て代入)するものです。右辺オペランドの式の値を得てから代入します。
演算子 | 名前 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|
= | 代入演算子 | left | $a = $b | $b の値を $a に代入 |
+= | 加算代入 | left | $a += $b | a=a+b $a + $b の値を $a に代入 |
-= | 減算代入 | left | $a -= $b | a=a-b $a – $b の値を $a に代入 |
*= | 乗算代入 | left | $a *= $b | a=a*b $a * $b の値を $a に代入 |
/= | 除算代入 | left | $a /= $b | a=a/b $a / $b の値を $a に代入 |
%= | 乗算代入 | left | $a %= $b | a=a%b $a % $b の値を $a に代入 |
.= | 連結代入 | left | $a .= $b | a=a.b $a と $b を連結した値を $a に代入 |
& | ビットAND(論理積) | left | $a & $b | $a および $b の両方にセットされているビットがセットされます |
| | ビットOR(論理和) | left | $a | $b | $a または $b のどちらかにセットされているビットがセットされます |
^ | ビットXOR(排他論理和) | left | $a ^ $b | $a または $b のどちらか一方にセットされており、両方にセットされていないビットがセットされます |
~ | ビット否定 | right | ~ $a | $a にセットされているビットはセットせず、そうでないものは逆にします |
<< | 左シフト | left | $a << $b | $a のビットを左に $b ビットシフトする (各シフトは "2をかける" ことを意味します) |
>> | 右シフト | left | $a >> $b | $a のビットを右に $b ビットシフトします (各シフトは "2で割る" ことを意味します) |
ビット演算子
ビットとは、コンピュータが処理する最小の単位です。ビット演算子は、オペランド(演算の対象となる値や変数のこと)の整数値をビット(2進数)に表現し、特定のビットを評価し演算を行います。つまり、整数値をビット値で演算します。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
& | ビットAND(論理積) | 3 | left | $a & $b | $a および $b の両方にセットされているビットがセットされます |
| | ビットOR(論理和) | 1 | left | $a | $b | $a または $b のどちらかにセットされているビットがセットされます |
^ | ビットXOR(排他論理和) | 2 | left | $a ^ $b | $a または $b のどちらか一方にセットされており、両方にセットされていないビットがセットされます |
~ | ビット否定 | 5 | right | ~ $a | $a にセットされているビットはセットせず、そうでないものは逆にします |
<< | 左シフト | 4 | left | $a << $b | $a のビットを左に $b ビットシフトする (各シフトは "2をかける" ことを意味します) |
>> | 右シフト | 4 | left | $a >> $b | $a のビットを右に $b ビットシフトします (各シフトは "2で割る" ことを意味します) |
比較演算子
比較演算子は左辺オペランドと右辺オペランドを比較します(オペランド:演算の対象となる値や変数のこと)。比較の結果が真なら論理値の「true(真)」を返し、そうでない場合は論理値の「false(偽)」を返します(論理型はこちらを参照下さい)。オペランドには数値や文字列の両方が使用できます。また他のさまざまな型を比較できます。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
== | 等しい | 1 | 結合しない | $a == $b | 型の相互変換をした後で $a が $b に等しい時に TRUE。 |
=== | 同じ | 1 | 結合しない | $a === $b | $a が $b に等しく同じ型である場合に TRUE |
!= | 等しくない | 1 | 結合しない | $a != $b | 型の相互変換をした後で $a が $b に等しくない場合に TRUE |
<> | 等しくない | 1 | 結合しない | $a <> $b | 型の相互変換をした後で $a が $b に等しくない場合に TRUE |
!== | 同じでない | 1 | 結合しない | $a !== $b | $a が $b と等しくないか、同じ型でない場合に TRUE |
> | より大きい | 2 | 結合しない | $a > $b | $a が $b より大きい時に TRUE |
< | より小さい | 2 | 結合しない | $a < $b | $a が $b より小さい時に TRUE |
>= | 以上 | 2 | 結合しない | $a >= $b | $a が $b より大きいか等しい時に TRUE |
<= | 以下 | 2 | 結合しない | $a <= $b | $a が $b より小さいか等しい時に TRUE |
<=> | 宇宙船 | 2 | 結合しない | $a <=> $b | $a が $b より小さいときに負の値、 $b と等しいときに 0、 $b より大きいときに正の値。(PHP7以降で使用可能) |
加算子(インクリメント演算子)・減算子(デクリメント演算子)
「++(加算子)」や「- -(減算子)」はある値を1つずつ増やしたり減らしたりする演算子です。この演算子は変数にのみ適用されます。数値のみでなく文字列が格納された変数に対しても適用することができます。
「++(加算子)」/「- -(減算子)」は bool 型の値には何も変更を加えません。 同じく NULL に減算子を適用しても何も起こりませんが、NULL に加算子を 適用すると 1 となります。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
++$a | 前置加算子 | 1 | 結合しない | ++$a | $a に 1 を加え、$a を返します。 |
$a++ | 後置加算子 | 1 | 結合しない | $a++ | $a を返し、$a に1を加えます。 |
– -$a | 前置減算子 | 1 | 結合しない | – -$a | $a から 1 を引き、$a を返します。 |
$a- – | 後置減算子 | 1 | 結合しない | $a- – | $a を返し、$a から 1 を引きます。 |
加算子(インクリメント演算子)・減算子(デクリメント演算子)
文字列演算子
文字列演算子は結合「.(ドット)」と結合代入「.=(ドットイコール)」の2種類あります。
結合演算子は「.(ドット)」で、左辺オペランドと右辺オペランドを結合したものを返します。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
. | 結合 | 1 | right | $a.$b | $a と $b を結合したものを返します。 |
.= | 結合代入 | 1 | right | $a.=$b | $a に $b を追加したものを返します。 |
論理演算子
論理演算子は論理値を評価し、結果を論理値で返します。オペランドは論理値とされます。(オペランドとは演算子の対象となる値のこと)。論理値は「真」「偽」を表す値であり、キーワード「TREU」と「FALSE」で表されます。論理値の詳細についてはこちらを参照下さい。
論理演算子はアルファベット版と記号版の2種類あります。アルファベット版と記号版では評価の優先順位が異なり、アルファベット版の優先順位が上です。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
and | 論理積 | 3 | left | $a and $b | $a および $b が共に TRUE の場合に TRUE |
or | 論理和 | 1 | left | $a or $b | $a または $b のどちらかが TRUE の場合に TRUE |
xor | 排他的論理和 | 2 | left | $a xor $b | $a または $b のどちらかが TRUE でかつ両方とも TRUE でない場合に TRUE |
! | 否定 | 6 | right | ! $a | $a が TRUE でない場合 TRUE |
&& | 論理積 | 5 | left | $a && $b | $a および $b が共に TRUE の場合に TRUE |
|| | 論理和 | 4 | left | $a || $b | $a または $b のどちらかが TRUE の場合に TRUE |
キャスト演算子
型のジャグリングとは規則に応じて自動的に行われるデータ型の変換のことです。
PHPは必要に応じてデータ型を自動的に変換します。データ型の変換をキャストといいます。
殆どの演算子はオペランド(値あるいは式)に対して前提条件があります。例えば、算術演算子のニ項演算子の場合、2つのオペランドが同じデータ型であることが前提条件になっています。そのためPHPでは前提条件に則るためにデータ型を自動的に変換します。
PHPが自動的に行ってくれるので楽なのですが、どのように変換されるか理解していないと、場合によっては意図しない結果が発生してしまうことがあります。
このように暗黙的に行われるキャストのことを型のジャグリングと言います。型のジャグリングには規則があります。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
(string) | キャスト | 1 | right | (string) $a | 指定したオペランド $a を文字列型として扱う。 |
(int)(integer) | キャスト | 1 | right | (int) $a | 指定したオペランド $a を整数型として扱う。 |
(float)(real) | キャスト | 1 | right | (float) $a | 指定したオペランド $a を浮動小数点型として扱う。 |
(bool)(boolean) | キャスト | 1 | right | (bool) $a | 指定したオペランド $a を論理型として扱う。 |
(array) | キャスト | 1 | right | (array) $a | 指定したオペランド $a を配列型として扱う。 |
(object) | キャスト | 1 | right | (object) $a | 指定したオペランド $a をオブジェクト型として扱う。 |
(unset) | キャスト | 1 | right | (unset) $a | 指定したオペランド $a をNULL型として扱う。 |
エラー制御演算子
エラー制御演算子「@」を式の前につけた場合、その式により生成されたエラーメッセージは無視されます。エラー演算子は全ての式で動作します。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
@ | エラー制御 | 1 | right | @式 | 式により生成されたエラーメッセージは無視されます。 |
実行演算子
実行演算子は、
(バッククォート)です。バッククォート演算子とも言います。
条件演算子(三項演算子)
条件演算子はオペランド(演算子の対象となる値)を3つ使用するPHP唯一の三項演算子です。条件演算子「? :」は「?」の左辺の式を評価し結果が「真(TRUE)」の場合は「:」の左辺の式の値を返し、「偽(FALSE)」の場合は「:」の右辺の式の値を返します。式に対して式を評価します。PHPの式についてはこちら
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
? : | 三項演算子 条件演算子 | 1 | left | $a ? $b : $c | $a が TRUE の場合に $b FALSE の場合に $c。 |
配列演算子
配列演算子は配列型のデータを統合したり比較したりする演算子です。
配列演算子としての「+」は、右辺の配列を左辺の配列に追加したものを返します。両方の配列に存在するキーについては左辺の配列の要素が優先され、右辺の配列にあった同じキーの要素は無視されます。 その他の配列演算子については配列演算子の種類を参照下さい。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
+ | 結合 | 1 | left | $a + $b | $a および $b を結合する。 |
== | 同等 | 1 | 結合しない | $a == $b | $a および $b のキー/値のペアが等しい場合に TRUE。 |
=== | 同一 | 1 | 結合しない | $a === $b | $a および $b のキー/値のペアが等しく、その並び順が等しく、 かつデータ型も等しい場合に TRUE。 |
!= | 等しくない | 1 | 結合しない | $a != $b | $a が $b と等しくない場合に TRUE。 |
<> | 等しくない | 1 | 結合しない | $a <> $b | $a が $b と等しくない場合に TRUE。 |
!== | 同一でない | 1 | 結合しない | $a !== $b | $a が $b と同一でない場合に TRUE。 |
PHPの演算子と優先順位
- 演算子は計算の優先順位がある
PHPの演算子 早見表 | |||||
---|---|---|---|---|---|
優先 順位 | 演算子 | 名前 | 種類 | 結合時の 評価 | 働き |
19 | new | new | new | 結合なし | 新規オブジェクト作成 |
18 | [ | array() | array() | left | 配列の添字 |
17 | ++ | 加算子 | 加算子 | 結合なし | 増加 |
-- | 減算子 | 減算子 | 結合なし | 減少 | |
~ | ビット否定 | 型 ビット演算子 | right | ビット反転 | |
(int) (float) (string) (array) (object) (bool) | キャスト | 型 キャスト演算子 | right | 整数型へ変換 浮動小数点型へ変換 文字列型へ変換 配列型へ変換 オブジェクト型へ変換 論理型へ変換 | |
@ | エラー制御 | 型 エラー制御演算子 | right | エラー制御 | |
instanceof | 型 | 型 | 結合なし | ||
! | 論理否定(NOT) | 論理演算子 | right | 論理否定(NOT) | |
16 | * / % | 乗算 除算 剰余 | 代数演算子 | left | 乗算 除算 剰余 |
15 | + - . | 加算 減算 文字列結合 | 代数演算子 代数演算子 文字列演算子 | left | 加算 減算 文字列結合 |
14 | << >> | 左シフト 右シフト | ビット演算子 | left | ビット単位左シフト ビット単位右シフト |
13 | < <= > >= | より小さい より小さいか等しい より大きい より大きいか等しい | 比較演算子 | 結合なし | より小さい より小さいか等しい より大きい より大きいか等しい |
12 | == != === !== <> <=> | 等しい 等しくない 同じ 同じでない 等しくない 宇宙船 | 比較演算子 | 結合なし | 値が等しい 値が等しくない 値と型が同じ 値と型が同じでない 値が等しくない 値がより小さい 等しい より大きい |
11 | & | ビット積(AND) | ビット演算子 | left | ビット積(AND) |
10 | ^ | ビット排他的論理和(XOR) | ビット演算子 | left | ビット排他的論理和(XOR) |
9 | | | ビット和(OR) | ビット演算子 | left | ビット和(OR) |
8 | && | 論理積(AND) | 論理演算子 | left | 論理積(AND) |
7 | || | 論理和(OR) | 論理演算子 | left | 論理和(OR) |
6 | ?? | NULL合体演算子 | NULL合体演算子 | right | |
6 | ? : | 三項演算子 (条件演算子) | 三項演算子 (条件演算子) | left | 条件演算子 |
5 | = += -= *= **= /= %= .= &= |= ^= ~= <<= >>= => | 代入 加算代入 減算代入 乗算代入 累乗代入 除算代入 乗算代入 連結代入 ビットAND代入 ビットOR代入 ビットXOR代入 ビット否定 左シフト代入 右シフト代入 配列値代入 | 代入演算子 | right | 操作結果の代入 |
4 | and | 論理積(AND) | 論理演算子 | left | 論理積(AND) |
3 | xor | 排他的論理和(XOR) | 論理演算子 | left | 排他的論理和(XOR) |
2 | or | 論理和(OR) | 論理演算子 | left | 論理和(OR) |
1 | , | さまざまな利用法 | さまざまな利用法 | left | リストの区切り |
タグ(=記事関連ワード)
日付
最終更新日:2020年07月03日