答え
php > print true ? '①' : true ? '②' : '③';
②
もちろんみなさんは正解は②だとすぐわかったと思いますが、
私は、①になると思っていて、バグフィックスで30分くらいハマりました🥺
社内でもアンケートをとったら予想外だと思った人が3人/4人いたので、意外と混乱しやすい書き方だと思います。
解説
処理の順番がわかるようにカッコをつけるとこうなります。
print (true ? '①' : true) ? '②' : '③';
-
(true ? '①' : true)
が評価されて'①'
になる。 -
'①' ? '②' : '③'
こうなる。 -
'①'
がtrue
と評価される (参考 PHP 型の比較表 https://www.php.net/manual/ja/types.comparisons.php) -
true ? '②' : '③'
になる -
②
になる
①だと思った人の頭の中
print true ? '①' : (true ? '②' : '③');
まとめ
- 三項演算子ネストすると混乱する人が出てくる🙋♂️
- 括弧つける、インデントをつける、if文にする など工夫して読みやすくしよう