[PHP-users 12725] Re: 3項演算子について

Yasuo Ohgaki php-users@php.gr.jp
Wed, 22 Jan 2003 11:45:19 +0900


大垣です。

C/Javaプログラマの落し穴の一つです...

Mashiki wrote:
> Mashikiです。
> 
> phpの3項演算子について昔から疑問に感じていることが
> あります。以下のスクリプトについて
> 
> 
> <?php
>   $a = $_GET['a'];
>   echo "<pre>\n";
> 
>   /* 式1 */
>   $msg = $a=='a'?'ええええ':
>          $a=='b'?'びいびいびい':
>          $a=='c'?'し〜〜〜〜〜':
>                  'どれでもない'
>   ;
>   echo "式1: $msg\n";
> 
>   /* 式2 */
>   $msg = ($a=='a'?'ええええ':
>          ($a=='b'?'びいびいびい':
>          ($a=='c'?'し〜〜〜〜〜':
>                   'どれでもない'
>   )));
>   echo "式2: $msg\n";
> ?>
> 
> 
> パラメータに a=a を指定すると
> 式1: し〜〜〜〜〜
> 式2: ええええ
> 
> パラメータに a=b を指定すると
> 式1: し〜〜〜〜〜
> 式2: びいびいびい
> 
> パラメータに a=c を指定すると
> 式1: し〜〜〜〜〜
> 式2: し〜〜〜〜〜
> 
> パラメータに a=x を指定すると
> 式1: どれでもない
> 式2: どれでもない
> 
> 
> 式2は意図どおりに動きます。式1の結果は「?」です。
> Cやjavaだと式1のように書いても、式2の結果のように
> なると思いますが、phpのこの振る舞いはどのように解釈
> したらよいでしょうか?

C/Javaだと?:演算子は結合性(Associativity)が右から左
ですがPHPは何故か?:の結合性は左から右です。したがって、上
記の動作は仕様通りです。

--
Yasuo Ohgaki