В PHP 5.6 наконец-то появился врожденный оператор power, отмеченный двойной звездочкой (**
) - не путать с ^
, побитовым оператором XOR.
До 5.6:
$power = pow(2, 3); // 8
5,6 и выше:
$power = 2 ** 3;
Оператор присваивания также доступен:
$power = 2 ** 2;
$power **= 2; // 8
В ходе многочисленных обсуждений и голосования было решено, что оператор будет ассоциативно-правым (не левым), и его приоритет оператора будет выше побитового оператора, а не (~
).
$a = 2 ** 3 ** 2; // 512, not 64 because of right-associativity
$a = 2 ** (3 ** 2); // 512
$b = 5 - 3 ** 3; // -22 (power calculated before subtraction)
Кроме того, по какой-то причине, которая не имеет для меня особого смысла, мощность вычисляется до отрицательного унарного оператора (-
), таким образом:
$b = -2 ** 2; // -4, same as writing -(2 ** 2) and not 4