UPDATE:2020年07月03日
PHP の 代入演算子
1 Minute Note
= | 代入 | ||
+= | 加算代入 | -= | 減算代入 |
*= | 乗算代入 | /= | 除算代入 |
%= | 乗算代入 | .= | 連結代入 |
&= | ビットAND代入 | |= | ビットOR代入 |
^= | ビットXOR代入 | ~= | ビット否定代入 |
<<= | 左シフト代入 | >>= | 右シフト代入 |
- 代入演算子 は、変数に値を代入したり、変数の値を更新する
- PHPの =(イコール) は、代入を意味する
- 演算結果の代入は、
右辺オペランドと左辺オペランドの演算結果を左辺オペランドに代入を意味する
代入演算子とは
- 代入演算子 は、変数に値を代入したり、変数の値を更新する
- PHPの =(イコール) は、代入を意味する
代入演算子は変数に値を代入したり、変数の値を更新する演算子です。
代表的な代入演算子「=(イコール)」
代表的な代入演算子は「=(イコール)」です。これは、左辺オペランドに右辺オベランドの式の値を代入(式の値を得て代入)するものです。右辺オペランドの式の値を得てから代入します。
1 2 3 4 5 | <!-- サンプルコード --> <?php $var = '変数に文字列を代入します。'; echo $var; ?> |
結果は
となります。
PHPにおいての「=(イコール)」は等しいではなく代入を意味します。左辺オペランドは変数になります。右辺オペランドは リテラル値、変数、複雑な式、などで、右辺オペランドの結果の値が左辺オペランドの変数に代入されます。
- リテラル値:リテラルとは「値そのも」のこと。文字列の hello や 数値の 100 など。
- 変数:すべてのデータ型の値を保存できる容器。
- 複雑な式:演算子で値を組み合わせたもの。
右辺オペランド:リテラル値
以下は代入演算子「=(イコール)」を使用して左辺オペランドの変数に右辺オペランドの数値のリテラル値を代入しています。
1 2 3 4 | <?php $int = 10;//リテラル値を代入 echo $int; ?> |
結果は
となります。
右辺オペランド:変数
以下は代入演算子「=(イコール)」を使用して左辺オペランドの変数に右辺オペランドの変数の値を代入しています。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $a = '変数の値を代入'; $b = $a; echo $b; ?> |
結果は
となります。
右辺オペランド:複雑な式
以下は代入演算子「=(イコール)」を使用して左辺オペランドの変数に右辺オペランドの式の結果の値を代入しています。
1 2 3 4 5 | <!-- サンプルコード --> <?php $int = 10 + 20; echo $int; ?> |
結果は
となります。
以下は代入演算子「=(イコール)」を使用して左辺オペランドの変数に右辺オペランドの式の結果の値を代入し、さらに、その変数の値を他の変数へ代入しています。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $a = 10 * 10; $b = $a; echo $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で割る" ことを意味します) |
演算結果の代入
- 演算結果の代入は、
右辺オペランドと左辺オペランドの演算結果を左辺オペランドに代入を意味する
代入演算子では、右辺オペランドと左辺オペランドの演算結果を左辺オペランドに代入しています。
代入演算子の種類、優先順位、結合時の評価です。すべての演算子の種類や優先順位はこちらを参照下さい。
+= 加算代入
以下は「$a += $b」の例です。a=a+b を意味します。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $a = 5;$b = 10; $a += $b; echo $a; ?> |
結果は
となります。
-= 減算代入
以下は「$a -= $b」の例です。a=a-b を意味します。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $a = 5;$b = 10; $a -= $b; echo $a; ?> |
結果は
となります。
*= 乗算代入
以下は「$a *= $b」の例です。a=a*b を意味します。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $a = 5;$b = 10; $a *= $b; echo $a; ?> |
結果は
となります。
/= 除算代入
以下は「$a /= $b」の例です。a=a/b を意味します。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $a = 5;$b = 10; $a /= $b; echo $a; ?> |
結果は
となります。
%= 乗算代入
.= 連結代入
ビット演算子
ビット(bit)とは
ビット(bit)とは、コンピュータが処理する最小の単位です。ビットは 0 と 1 に対応しており、2進数 で表現可能です。コンピューターの処理単位であるビットがなぜ 0 と 1 の2通りに対応するのか、それは、コンピューター内部のデジタルICが、直流電圧の強弱、5V(低い場合もある) か 0V の電気信号の入出力のみ対応させることで最適化を図ることができます。その上で、5V を数値の 1 で表し 0V を数値の 0 で表すことで成り立っているからです。これは、コンピューターで2進数が採用される最も大きな理由の1つです。その他に、ハードウェアへの実装の容易さや、演算の簡潔さなどが挙げられ、必然的に2進数を使用することになるのです。コンピューター内部では2進数ですべてのデータや命令を処理しています。因みに、人間は指が10本あるので10進法が広がったと言われています。
1ビットだと1桁で 0 と 1 の2通りだけです。2ビットだと2桁で 0 と 1 と 10 と 11 の4通りになります。3ビットだと3桁、4ビットだと4桁となり、8ビット=1バイトは8桁になります。 2進数 は各桁を 0 と 1 で表現します。10進数 だと各桁を 0~9 で表現します。
ビット数 | 最大値 | 通り数 |
---|---|---|
1ビット | 1 | 0, 1 の2通り |
2ビット | 11 | 00, 01, 10, 11 の4通り(2の2乗) |
3ビット | 111 | 000, 001, 010, 011, 100, 101, 110, 111 の8通り(2の3乗) |
4ビット | 1111 | 2の4乗 |
5ビット | 11111 | 2の5乗 |
6ビット | 111111 | 2の6乗 |
7ビット | 1111111 | 2の7乗 |
8ビット | 11111111 | 2の8乗 256通り |
0と1の数字の組み合わせの並びをビット列と言います。コンピュータでは通常、1ビットを8つ並べて8ビット(1バイト)を1つの単位として扱い、8ビット(1バイト)は、0 から2進数の 11111111 (10進数の255)までが表現可能です。
ビット演算子は
ビット演算子は、オペランド(演算の対象となる値や変数のこと)の整数値をビット(bit)=2進数で表現し、特定のビットを評価し演算を行います。つまり、整数値をビット値で演算します。
- bindec() 2進数を10進数に変換する
- decbin() 10進数を2進数に変換する
ビットAND(論理積)演算子を使用した簡単な例で考えて見ましょう。
1 2 3 4 | <?php $a = 3;$b = 35; echo $a & $b; ?> |
結果は
となります。
ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
10進法の 3 は 2進法で 11 となります。
10進法の 35 は 2進法で 100011 となります。
2進法のそれぞれ対応するビット列を比較します。
ビットAND(論理積)の場合、両方とも1の場合は1になります。そうでない場合は0になります。
11ビットを10011ビットと比較する場合は、以下のように000011と対応するビットを考えます。
ビット列の比較
000011
100011
————-
000011
2進法の 11 は 10進法の 3 となります。
ですので、結果は 3 となります。
&= ビットAND代入
1 2 3 4 5 | <!-- サンプルコード --> <?php $a = 3;$b = 35; echo $a & $b; ?> |
結果は
となります。
ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)
2進法のそれぞれ対応するビットを比較します。
ビットAND(論理積)の場合、両方とも1の場合は1になります。そうでない場合は0になります。
000011
100011
————-
000011
000011(2進法)は3(10進法) です。
|= ビットOR代入
1 2 3 4 5 | <!-- サンプルコード --> <?php $a = 3;$b = 35; echo $a | $b; ?> |
結果は
となります。
ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)
2進法のそれぞれ対応するビットを比較します。
ビットOR(論理和)の場合、両方とも0の場合は0になります。そうでない場合は1になります。
000011
100011
————-
100011
100011(2進法)は35(10進法) です。
^= ビットXOR代入
1 2 3 4 5 | <!-- サンプルコード --> <?php $a = 3;$b = 35; echo $a ^ $b; ?> |
結果は
となります。
ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)
2進法のそれぞれ対応するビットを比較します。
ビットXOR(排他論理和)の場合、両方等しい場合は0になります。片方が0で片方が1の場合は1となります。
000011
100011
————-
100000
100000(2進法)は32(10進法) です。
~= ビット否定代入
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php $a = intval('1100', 2); printf("%064b", $a); echo '<br>'; printf("%064b", ~$a); ?> |
※intval(変数, 基数) は、変数を指定した基数(2進数、8進数、16進数)の整数型に変換します。
結果は
1111111111111111111111111111111111111111111111111111111111110011
となります。
※intval(変数, 基数) は、変数を指定した基数(2進数、8進数、16進数)の整数型に変換します。奇数を指定しない場合10進数となります。
ビット否定演算子はビットを反転させます。1を0に0を1に変換します。
<<= 左シフト代入
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $a = intval('1111', 2); $b = intval('0001', 2); echo decbin($a << $b); ?> |
※intval(変数, 基数) は、変数を指定した基数(2進数、8進数、16進数)の整数型に変換します。奇数を指定しない場合10進数となります。
結果は
となります。
左シフトの場合、左オペランドを2進法に変換し、右オペランドで指定したビット数分、左にシフトします。シフトした分を0で埋めます。両方のオペランドは演算前に整数に変換されます。
>>= 右シフト代入
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $a = intval('1111', 2); $b = intval('0001', 2); echo decbin($a >> $b); ?> |
※intval(変数, 基数) は、変数を指定した基数(2進数、8進数、16進数)の整数型に変換します。奇数を指定しない場合10進数となります。
結果は
となります。
右シフトの場合、左オペランドを2進法に変換し、右オペランドで指定したビット数分右にシフトします。シフトした分を0で埋めます。両方のオペランドは演算前に整数に変換されます。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <!-- サンプルコード --> <h3>加算代入</h3> <?php $a = 5;$b = 10; $a += $b; echo $a; ?> <h3>減算代入</h3> <?php $a = 5;$b = 10; $a -= $b; echo $a; ?> <h3>減算代入</h3> <?php $a = 5;$b = 10; $a *= $b; echo $a; ?> <h3>除算代入</h3> <?php $a = 5;$b = 10; $a /= $b; echo $a; ?> <h3>剰余代入</h3> <?php $a = 5;$b = 10; $a %= $b; echo $a; ?> <h3>ビット&代入</h3> <?php $a = 5;$b = 10; $a &= $b; echo $a; ?> <h3>ビットOR代入</h3> <?php $a = 5;$b = 10; $a |= $b; echo $a; ?> <h3>ビットXOR代入</h3> <?php $a = 5;$b = 10; $a ^= $b; echo $a; ?> <h3>連結代入</h3> <?php $a = 'Hello';$b = ' World!'; $a .= $b; echo $a; ?> |
100
加算代入
15
減算代入
-5
減算代入
50
除算代入
0.5
剰余代入
5
ビット&代入
0
ビットOR代入
15
ビットXOR代入
15
連結代入
Hello World!
PHPの演算子
演算子の種類
種類 | 説明 |
算術演算子(代数演算子) | 算術演算子(代数演算子)は「足す」「引く」「掛ける」「割る」「余り」 |
---|---|
代入演算子 | 代入演算子は変数に値を代入したり、変数の値を更新する |
ビット演算子 | ビット演算子は、整数値をビット値で演算 ビットはコンピュータが処理する最小単位 |
比較演算子 | 比較演算子は左右のオペランドを比較する 結果と「true(真)」「false(偽)」で返す |
加算子(インクリメント演算子)・減算子(デクリメント演算子) | 加算子/減算子は値を1ずつ増減 |
文字列演算子 | 文字列演算子は結合と結合代入の2種類 |
論理演算子 | 論理演算子は論理値を評価し論理値を返す |
キャスト演算子 | キャスト演算子は右辺オペランドのデータ型を指定した型にする |
エラー制御演算子 | エラー制御演算子 @ を式の前に付けると式のエラーは無視される |
実行演算子 | 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日