代入・単項演算子
目次
- 解説
- 1. 代入演算子
- 2. 単項演算子
解説
1. 代入演算子
代入演算子には「変数 > 代入と値」のページで解説した、ただ代入するだけのイコール「=」以外にも、変数に入っている値を使用した計算結果・結合結果を再代入する複合代入演算子が存在します。
代入演算子 | 用例 | 処理内容 |
---|---|---|
= | A = B | AにBを代入する |
+= | A += B | 「A = A + B」と同じ AにBを足し算(String型ならばAとBを結合)し、 結果をAに再代入する |
-= | A -= B | 「A = A - B」と同じ AからBを引き算し、結果をAに再代入する |
*= | A *= B | 「A = A * B」と同じ AとBを掛け算し、結果をAに再代入する |
/= | A /= B | 「A = A / B」と同じ AからBを割り算し、結果をAに再代入する |
%= | A %= B | 「A = A % B」と同じ AからBを割り算し、余りをAに再代入する |
.= | A .= B | 「A = A . B」と同じ AにBを結合し、結果をAに再代入する |
なお、右辺が式だった場合にはその計算が優先されます。実際に代入される値を確認しておきましょう。
static function practiceCompound() {
$intVariable = 1;
Logger::echo($intVariable);
$intVariable += 100; // $intVariable + 100
Logger::echo($intVariable);
$intVariable -= 50; // $intVariable - 50
Logger::echo($intVariable);
$intVariable *= 4; // $intVariable * 4
Logger::echo($intVariable);
$intVariable /= 6; // $intVariable / 6
Logger::echo($intVariable);
$intVariable %= 8; // $intVariable % 8
Logger::echo($intVariable);
$stringVariable = 'こんにちは ';
$stringVariable .= 'DigSkillさん!'; // $stringVariable . DigSkillさん!
Logger::echo($stringVariable);
$intVariable *= 1 + 2 + 3; // $intVariable = $intVariable * (1 + 2 + 3)
Logger::echo($intVariable);
}
[2020/12/31 12:34:56] 1 // 定義時に代入された「1」
[2020/12/31 12:34:56] 101 // 「1」に「100」を加算
[2020/12/31 12:34:56] 51 // 「101」から「50」を減算
[2020/12/31 12:34:56] 204 // 「51」に「4」を乗算
[2020/12/31 12:34:56] 34 // 「204」から「6」を除算
[2020/12/31 12:34:56] 2 // 「34」から「8」を除算したあまり
[2020/12/31 12:34:56] こんにちは DigSkillさん! // 「こんにちは 」に「DigSkillさん!」を結合
[2020/12/31 12:34:56] 12 // 先に「(1 + 2 + 3)」を計算して「2」に乗算
2. 単項演算子
単項演算子とは、変数の前後に「++」や「--」を付けることで、その変数の値を直接加算・減算できる演算子です。他の演算子と異なり、演算に使用される項(オペランド)が単体(=変数が単体)で成り立つ「式」となるため「単項演算子」と呼ばれます。
短い表記で加算・減算ができるため便利ですが、前に付けた場合と後に付けた場合で、それぞれ処理内容が異なり、式を参照した場合の結果をよく理解した上で使う必要があります。
前に置く場合
前置単項演算子 | 用例 | 呼び方・処理内容 |
---|---|---|
++ | B = ++A | 前置加算演算子・インクリメント 変数Aに対する影響 A = A + 1 と同じ 変数Bに対する影響 加算後のAが代入される |
-- | B = --A | 前置減算演算子・デクリメント 変数Aに対する影響 A = A - 1 と同じ 変数Bに対する影響 減算後のAが代入される |
後に置く場合
後置単項演算子 | 用例 | 呼び方・処理内容 |
---|---|---|
++ | B = A++ | 後置加算演算子・インクリメント 変数Aに対する影響 A = A + 1 と同じ 変数Bに対する影響 加算前のAが代入される |
-- | B = A-- | 後置減算演算子・デクリメント 変数Aに対する影響 A = A - 1 と同じ 変数Bに対する影響 減算前のAが代入される |
前に置いた場合と後に置いた場合の違いを確認しておきましょう。
static function practiceUnary() {
$counter = 0;
Logger::echo($counter); // (1)
++$counter; // 前置加算演算子
Logger::echo($counter); // (2) 前行で加算済みの値
$counter++; // 後置加算演算子
Logger::echo($counter); // (3) 前行で加算済みの値
$output = 0;
$output = ++$counter; // $outputに代入される値は加算後
Logger::echo($output); // (4) 代入された加算後の値
Logger::echo($counter); // (5) 前々行で加算済みの値
$output = $counter++; // $outputに代入される値は加算前
Logger::echo($output); // (6) 代入された加算前の値
Logger::echo($counter); // (7) 前々行で加算済みの値
Logger::echo(++$counter); // (8) echoに渡される値は加算後
Logger::echo($counter); // (9) 前行で加算済みの値
Logger::echo($counter++); // (10) echoに渡される値は加算前
Logger::echo($counter); // (11) 前行で加算済みの値
}
[2020/12/31 12:34:56] 0 // (1) 定義時に代入された「0」
[2020/12/31 12:34:56] 1 // (2) counterの値
[2020/12/31 12:34:56] 2 // (3) counterの値
[2020/12/31 12:34:56] 3 // (4) ++counterで加算後に代入された値
[2020/12/31 12:34:56] 3 // (5) counterの値
[2020/12/31 12:34:56] 3 // (6) counter++で加算前に代入された値
[2020/12/31 12:34:56] 4 // (7) counterの値
[2020/12/31 12:34:56] 5 // (8) ++counterで加算後にoutに渡された値
[2020/12/31 12:34:56] 5 // (9) counterの値
[2020/12/31 12:34:56] 5 // (10) counter++で加算前にoutに渡された値
[2020/12/31 12:34:56] 6 // (11) counterの値
問題
実践問題
(1) | VSCodeを起動し、ヘッダーメニューの「ファイル」>「フォルダーを開く...」から、「php_basic」プロジェクトを開いてください。 |
(2) | 「php_basic」プロジェクトに「Expression.php」を開いてください。 ※無い場合は「式と演算子」を先に学習しましょう。 |
(3) | 「Expression」クラス内に次のサンプルコードのメソッドをコピー&ペーストし、 mainから呼び出せるようにして、「http://localhost/php_basic/Expression.php」へのアクセスで表示されることを確認してください。 ※この時点ではブラウザに「3」が3回出力されます。 |
(4) | コメント行に記された各問題文に対し、答えとなるプログラムコードを 問題文の次の空白行以降に書き込み、ブラウザから確認してください。 |
static function questionCompound() {
$a = 1;
$b = 2;
$c = 3;
// (問1)右辺に変数a,b,cを3つとも使用して、
// 空白行の次にある変数cの出力結果が
// 「6」となるように変数cに代入してください。
// なお、他の整数値などを使用してはいけません。
Logger::echo($c);
// (問2)右辺に変数a,b,cを3つとも使用して、
// 空白行の次にある変数cの出力結果が
// 「54」となるように変数cに代入してください。
// なお、他の整数値などを使用してはいけません。
Logger::echo($c);
// (問3)右辺に変数a,b,cを3つとも使用して、
// 空白行の次にある変数cの出力結果が
// 「-3」となるように変数cに代入してください。
// なお、他の整数値などを使用してはいけません。
Logger::echo($c);
}