Operator Precedence
CoddyのPHPジャーニー「基礎」セクションの一部 — レッスン 20/71。
式に複数の演算子が含まれている場合、PHPは演算子の優先順位と呼ばれる特定の順序に従います。数学と同じように、乗算と除算は加算と減算よりも前に行われます。
<?php
echo 5 + 3 * 2; // 出力: 11(16ではありません)
?>PHPはまず3 × 2を計算し(6になります)、次に5を加算します。もし演算子の優先順位が同じであれば、左から右に計算され、5 + 3 = 8、次に8 × 2 = 16となります。しかし、実際にはそのようには動作しません。
これまでに学んだ演算子の優先順位を、高いものから順に示します:
| 優先順位 | 演算子 |
| 最高 | ** (べき乗) |
| 高 | * / % |
| 低 | + - |
デフォルトの優先順位を変更するには、括弧を使用します。括弧内の演算は常に最初に評価されます:
<?php
echo (5 + 3) * 2; // 出力: 16
echo 2 ** 3 * 2; // 出力: 16 (8 * 2)
echo 2 ** (3 * 2); // 出力: 64 (2^6)
?>迷ったときは、括弧を使って意図を明確にしましょう。そうすることでコードが読みやすくなり、予期しない結果を防ぐことができます。
チャレンジ
簡単入力から3つの数値 a、b、および c を読み取ります。
加算が乗算より先に行われるように括弧を使用して、次の式の計算結果を出力してください:
(a + b) * c ** 2
これは、最初に a と b を足し、その和に c の2乗を掛けることを意味します。
例:
入力が 2、3、4 の場合、出力は 80 になります。理由は以下の通りです:
- 最初に、2 + 3 = 5 を計算します
- 次に、4 ** 2 = 16 を計算します
- 最後に、5 * 16 = 80 を計算します
自分で試してみよう
<?php
// 入力を読み込む
$a = intval(fgets(STDIN));
$b = intval(fgets(STDIN));
$c = intval(fgets(STDIN));
// TODO: (a + b) * c ** 2 を計算するコードを以下に記述してください
// 結果を出力する
echo $result;
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Comparison & Logical Operators
Comparison OperatorsEquality & IdentityLogical Operators Part 1Logical Operators Part 2Recap - Simple Logic2Variables and Data Types
NumbersStrings and QuotesBooleansNaming ConventionsRecap - Variable InitEmpty VariablesString ConcatenationGetting User InputCast to Different Types3Basic Operators
Arithmetic OperatorsModulo OperatorExponentiation OperatorCombined AssignmentIncrement/DecrementOperator PrecedenceRecap - Simple CalculationsString Operators