三項演算子の解釈要注意

昨年末頃にこんな記事を書いた。

C#とか。 - Grim Saga Project 別館:れびんの勉強部屋 - FizzBuzz問題・解答編:
 http://d.hatena.ne.jp/levin_gsp/20071109/1194579778

 
この中に

        • -

驚愕の事実が判明しちゃいました。
php 5.2.2 Win だけかどうかわかりませんが、一処理に三項演算子を三つ以上重ねると最後尾の二つしか効かない。

        • -

こんなことを書いた。
これ、ずっと気になってた。
今も PHP の開発を続けている身でもあるので。
本日たまたまわんくまで三項演算子が取り沙汰されているのに便乗して、R・田中一郎さんの記事にコメントをつけた。
 

R.Tanaka.Ichiro's Blog - 三項演算子は上から評価される(その2):
 http://blogs.wankuma.com/rti/archive/2008/09/03/155325.aspx

 
そこで id:uskz さんからご指摘を受ける。
 

梶本裕介の日記 - 2008年09月03日:
 http://d.hatena.ne.jp/uskz/20080903/p6

 
げげ、マジか。
 
ってのが、まず第一印象。
時間の都合上(またか)、詳細な説明は割愛させていただく。
 
冒頭で引用した私の記事の表現は正しくないことがわかった。
左結合だったのだ。
そこで(意図した)正しい処理順序を()で明示することで解決。
 

<?php
for($i=1;$i<=100;$i++){
  echo ($i%15==0?'FizzBuzz ':($i%5==0?'Buzz ':($i%3==0?'Fizz ':$i.' ')));
}
?>

 
これで PHP 三行プログラミングで FizzBuzz を倒すことが出来た。
勉強になった。