PHPで三項演算子のネストがおかしい

三項演算子のネストには賛否両論あるけど、時にはこういう風に書きたいこともあるわけで。

<?php
$value = 'hoge';

$result = $value == 'hoge' ? 10 :
          $value == 'fuga' ? 20 :
          -1;

print $result;
?>
20

期待する出力は10なんだけど、なぜか20になる。
そこでこんな風にしてみたら……

<?php
$value = 'hoge';

$result = $value == 'hoge' ? hoge() :
          $value == 'fuga' ? fuga() :
          -1;

print $result;

function hoge() { print 'hoge'; return 10; }
function fuga() { print 'fuga'; return 20; }
?>
hogefuga20

( Д )  ゚ ゚
貫通しとるがな!

<?php
$value = 'hoge';

$result = $value == 'hoge' ? hoge() :
          ($value == 'fuga' ? fuga() :
          -1);

print $result;

function hoge() { print 'hoge'; return 10; }
function fuga() { print 'fuga'; return 20; }
?>
hoge10

elseに相当する部分を括弧で括ってみたら期待通りになった。
いやだがしかし、括弧で括るぐらいならifやswitchで書くっつーの。

他の言語

Perl

my $value = 'hoge';

my $result = $value eq 'hoge' ? 10 :
             $value eq 'fuga' ? 20 :
             -1;

print $result;
10


Java

public class Ternary {
  public static void main(String[] args) {
    String value = "hoge";

    int result = value == "hoge" ? 10 :
                 value == "fuga" ? 20 :
                 -1;

    System.out.println(result);
  }
}
10


JavaScript

var value = 'hoge';

var result = value == 'hoge' ? 10 :
             value == 'fuga' ? 20 :
             -1;

alert(result);
10


ここらでPHPが異端だということははっきりしたので、他の言語は割愛。