文字列連結での面白かった動作

ちょろちょろとバイト先でPHPのコードをいじっているときに見つけたおもしろい動作。

下のようなテストプログラムを用意したときの話です。

<?php>
$a = 456;
$b = 345;
echo "a - bは" . $a -$b . "です"

これを実行したときに表示してもらいたい文字列は

a - bは111です

なのですが、実際は

-345です

・・・なにこれw

上の用に動作させたければechoの部分で

<?php>
$a = 456;
$b = 345;
echo "a - bは" . ($a -$b) . "です"

とする必要があるみたい。

どういう動作が行われているのかを考えてみた。

多分前から順々に動作していく事のせいだろうな。

  • "a - b" . $a が解釈される。
  • - $bが解釈される。
  • - $b . "です"が解釈される。
  • 結果後ろの部分だけechoされて -111です

となるのでしょうかねぇw