社内IRCでphpの論理演算子の話題が出てたので、phpで僕が嫌いな論理演算子と三項演算子の挙動について。
% perl -e 'print("hoge" || "fuga");'
hoge
% ruby -e 'print("hoge" || "fuga");'
hoge
% python -c 'print("hoge" or "fuga");'
hoge
% js -e 'print("hoge" || "fuga");'
hoge
% php -r 'print("hoge" || "fuga");'
1phpは論理演算子の返り値はboolにキャストされてしまうようです。
% perl -e 'print(1 ? 2 : 3 ? 4 : 5);' 2 % ruby -e 'print(1 ? 2 : 3 ? 4 : 5);' 2 % js -e 'print(1 ? 2 : 3 ? 4 : 5);' 2 % php -r 'print(1 ? 2 : 3 ? 4 : 5);' 4
phpの三項演算子は左結合するようです。
どうしてこうなった…。