TechFULの中の人

triple-four’s blog

PHPの演算子の優先順位

TechFULの中の人のSRです。

今回は演算子の優先順位に関係するお問い合わせをいただいたので、参考になればと思い、ブログで説明を載せます。

TechFULチャレンジの問題「算術演算」をPHPで解く方は参考にして見てください!
※まだの人はぜひTechFULチャレンジ初級編の「算術演算」をPHPで解いて見てください!!
https://procon.techful.jp/member/challenge/enter



 

問題その1

以下のPHPプログラムを実行すると、どうなるでしょうか?

<?php
$n = 3;
$m = 2;
echo 'ans=' . $n * $m;


これを実行すると、
ans=6
が出力されます。直感的に理解できると思います。

 

問題その2

さて、ここで、以下のプログラムを実行して見ます。

<?php
$n = 3;
$m = 2;
echo 'ans=' . $n + $m;

すると、警告が発生し、正しく表示されません。


どういうことかというと、
文字列連結の.演算子の方が、+演算子より先に評価されるからです。


'ans=' . $n + $m;
という式は。。。


1, 「'ans=' . $n」が評価され、'ans=3'という文字列になる。
2, 「'ans=3' + $m」を評価しようとするが、+演算子は数値以外を引数に取れない。
これが警告が発生する原因です。

 

これを期待通りに動かすには以下のように()を利用して評価の優先順位を高めてやる必要があります。

<?php
$n = 3;
$m = 2;
echo 'ans=' . ($n + $m);

すると、「ans=5」と期待通りの値が出力されます。

 

まとめ

PHPで、文字列連結と算術演算を1つの式で行う時は、演算子の優先順位に注意する!

PHP公式の説明ページも参考にしてください。

PHP: 演算子の優先順位 - Manual