[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