社内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");' 1
phpは論理演算子の返り値は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の三項演算子は左結合するようです。
どうしてこうなった…。