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

Yasuo Ohgaki php-users@php.gr.jp
2003年1月22日 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

AltStyle によって変換されたページ (->オリジナル) /