menu
ホーム > PHPの文法 > 4 演算子 > PHP の 代入演算子
PHPリファレンス

UPDATE:2020年07月03日

PHP の 代入演算子

PHP の 代入演算子 | wepicks!

PHP4 PHP5 PHP7

1 Minute Note

=代入
+=加算代入-=減算代入
*=乗算代入/=除算代入
%=乗算代入.=連結代入
&=ビットAND代入|=ビットOR代入
^=ビットXOR代入~=ビット否定代入
<<=左シフト代入>>=右シフト代入
  • 代入演算子 は、変数に値を代入したり、変数の値を更新する
  • PHPの =(イコール) は、代入を意味する
  • 演算結果の代入は、
    右辺オペランドと左辺オペランドの演算結果を左辺オペランドに代入を意味する
代入演算子は変数に値を代入したり、変数の値を更新する演算子です。


代入演算子とは

POINT

  • 代入演算子 は、変数に値を代入したり、変数の値を更新する
  • PHPの =(イコール) は、代入を意味する

代入演算子は変数に値を代入したり、変数の値を更新する演算子です。

代表的な代入演算子「=(イコール)」

代表的な代入演算子は「=(イコール)」です。これは、左辺オペランドに右辺オベランドの式の値を代入(式の値を得て代入)するものです。右辺オペランドの式の値を得てから代入します。

結果は

変数に文字列を代入します。

となります。

PHPにおいての「=(イコール)」は等しいではなく代入を意味します。左辺オペランドは変数になります。右辺オペランドは リテラル値、変数、複雑な式、などで、右辺オペランドの結果の値が左辺オペランドの変数に代入されます。

  • リテラル値:リテラルとは「値そのも」のこと。文字列の hello や 数値の 100 など。
  • 変数:すべてのデータ型の値を保存できる容器。
  • 複雑な式:演算子で値を組み合わせたもの。

右辺オペランド:リテラル値

以下は代入演算子「=(イコール)」を使用して左辺オペランドの変数に右辺オペランドの数値のリテラル値を代入しています。

結果は

10

となります。

右辺オペランド:変数

以下は代入演算子「=(イコール)」を使用して左辺オペランドの変数に右辺オペランドの変数の値を代入しています。

結果は

変数の値を代入

となります。

右辺オペランド:複雑な式

以下は代入演算子「=(イコール)」を使用して左辺オペランドの変数に右辺オペランドの式の結果の値を代入しています。

結果は

30

となります。

以下は代入演算子「=(イコール)」を使用して左辺オペランドの変数に右辺オペランドの式の結果の値を代入し、さらに、その変数の値を他の変数へ代入しています。

結果は

100

となります。

代入演算子の種類

代入演算子の種類、優先順位、結合時の評価です。すべての演算子の種類や優先順位はこちらを参照下さい。

演算子名前結合時の評価結果
=代入演算子left$a = $b$b の値を $a に代入
+=加算代入left$a += $ba=a+b
$a + $b の値を $a に代入
-=減算代入left$a -= $ba=a-b
$a – $b の値を $a に代入
*=乗算代入left$a *= $ba=a*b
$a * $b の値を $a に代入
/=除算代入left$a /= $ba=a/b
$a / $b の値を $a に代入
%=乗算代入left$a %= $ba=a%b
$a % $b の値を $a に代入
.=連結代入left$a .= $ba=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で割る" ことを意味します)

演算結果の代入

POINT

  • 演算結果の代入は、
    右辺オペランドと左辺オペランドの演算結果を左辺オペランドに代入を意味する

代入演算子では、右辺オペランドと左辺オペランドの演算結果を左辺オペランドに代入しています。
代入演算子の種類、優先順位、結合時の評価です。すべての演算子の種類や優先順位はこちらを参照下さい。

+= 加算代入

以下は「$a += $b」の例です。a=a+b を意味します。

結果は

15

となります。

-= 減算代入

以下は「$a -= $b」の例です。a=a-b を意味します。

結果は

-5

となります。

*= 乗算代入

以下は「$a *= $b」の例です。a=a*b を意味します。

結果は

50

となります。

/= 除算代入

以下は「$a /= $b」の例です。a=a/b を意味します。

結果は

0.5

となります。

%= 乗算代入

.= 連結代入

ビット演算子

ビット(bit)とは

ビット(bit)とは、コンピュータが処理する最小の単位です。ビットは 01 に対応しており、2進数 で表現可能です。コンピューターの処理単位であるビットがなぜ 0 と 1 の2通りに対応するのか、それは、コンピューター内部のデジタルICが、直流電圧の強弱、5V(低い場合もある) か 0V の電気信号の入出力のみ対応させることで最適化を図ることができます。その上で、5V を数値の 1 で表し 0V を数値の 0 で表すことで成り立っているからです。これは、コンピューターで2進数が採用される最も大きな理由の1つです。その他に、ハードウェアへの実装の容易さや、演算の簡潔さなどが挙げられ、必然的に2進数を使用することになるのです。コンピューター内部では2進数ですべてのデータや命令を処理しています。因みに、人間は指が10本あるので10進法が広がったと言われています。

1ビット:1桁の 0 と 1 の値で表現できる情報量の最小単位

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ビット10, 1 の2通り
2ビット1100, 01, 10, 11 の4通り(2の2乗)
3ビット111000, 001, 010, 011, 100, 101, 110, 111 の8通り(2の3乗)
4ビット11112の4乗
5ビット111112の5乗
6ビット1111112の6乗
7ビット11111112の7乗
8ビット111111112の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(論理積)演算子を使用した簡単な例で考えて見ましょう。

結果は

3

となります。

ビット演算子は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代入

結果は

3

となります。

ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)

2進法のそれぞれ対応するビットを比較します。
ビットAND(論理積)の場合、両方とも1の場合は1になります。そうでない場合は0になります。

000011
100011
————-
000011

000011(2進法)は3(10進法) です。

|= ビットOR代入

結果は

35

となります。

ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)

2進法のそれぞれ対応するビットを比較します。
ビットOR(論理和)の場合、両方とも0の場合は0になります。そうでない場合は1になります。

000011
100011
————-
100011

100011(2進法)は35(10進法) です。

^= ビットXOR代入

結果は

32

となります。

ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)

2進法のそれぞれ対応するビットを比較します。
ビットXOR(排他論理和)の場合、両方等しい場合は0になります。片方が0で片方が1の場合は1となります。

000011
100011
————-
100000

100000(2進法)は32(10進法) です。

~= ビット否定代入

※intval(変数, 基数) は、変数を指定した基数(2進数、8進数、16進数)の整数型に変換します。

結果は

0000000000000000000000000000000000000000000000000000000000001100
1111111111111111111111111111111111111111111111111111111111110011

となります。
※intval(変数, 基数) は、変数を指定した基数(2進数、8進数、16進数)の整数型に変換します。奇数を指定しない場合10進数となります。

ビット否定演算子はビットを反転させます。1を0に0を1に変換します。

<<= 左シフト代入

※intval(変数, 基数) は、変数を指定した基数(2進数、8進数、16進数)の整数型に変換します。奇数を指定しない場合10進数となります。

結果は

11110

となります。

左シフトの場合、左オペランドを2進法に変換し、右オペランドで指定したビット数分、左にシフトします。シフトした分を0で埋めます。両方のオペランドは演算前に整数に変換されます。

>>= 右シフト代入

※intval(変数, 基数) は、変数を指定した基数(2進数、8進数、16進数)の整数型に変換します。奇数を指定しない場合10進数となります。

結果は

111

となります。

右シフトの場合、左オペランドを2進法に変換し、右オペランドで指定したビット数分右にシフトします。シフトした分を0で埋めます。両方のオペランドは演算前に整数に変換されます。

サンプルコード

– サンプル Click Here ! –

実行結果
代入
100

加算代入
15

減算代入
-5

減算代入
50

除算代入
0.5

剰余代入
5

ビット&代入
0

ビットOR代入
15

ビットXOR代入
15

連結代入
Hello World!

– サンプル Click Here ! –

PHPの演算子

演算子の種類

種類説明
算術演算子(代数演算子)算術演算子(代数演算子)は「足す」「引く」「掛ける」「割る」「余り」
代入演算子代入演算子は変数に値を代入したり、変数の値を更新する
ビット演算子ビット演算子は、整数値をビット値で演算 ビットはコンピュータが処理する最小単位
比較演算子比較演算子は左右のオペランドを比較する 結果と「true(真)」「false(偽)」で返す
加算子(インクリメント演算子)・減算子(デクリメント演算子)加算子/減算子は値を1ずつ増減
文字列演算子文字列演算子は結合と結合代入の2種類
論理演算子論理演算子は論理値を評価し論理値を返す
キャスト演算子キャスト演算子は右辺オペランドのデータ型を指定した型にする
エラー制御演算子エラー制御演算子 @ を式の前に付けると式のエラーは無視される
実行演算子PHPは実行演算子「“(バッククォート)」をサポート
条件演算子(三項演算子)(条件式) ? 真の場合の式 : 偽の場合の式;
配列演算子配列演算子は配列を統合したり比較したりする

演算子の優先順位

POINT

  • 演算子は計算の優先順位がある
PHPの演算子 早見表
優先
順位
演算子名前種類結合時の
評価
働き
19newnewnew結合なし新規オブジェクト作成
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操作結果の代入
4and 論理積(AND)論理演算子left論理積(AND)
3xor排他的論理和(XOR)論理演算子left排他的論理和(XOR)
2or論理和(OR)論理演算子left論理和(OR)
1,さまざまな利用法さまざまな利用法leftリストの区切り


タグ(=記事関連ワード)

日付

公開日:2019年11月14日
最終更新日:2020年07月03日

関連記事

配列関数サンプル

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

https://wepicks.net/phpref-operators_assignment/trackback/

page top