かみぽわーる

kamipo's blog

phpの論理演算子と三項演算子

社内IRCphpの論理演算子の話題が出てたので、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の三項演算子は左結合するようです。


どうしてこうなった…。