[PHP-users 26726] Re: 三項演算子について

榮水貴行 t-eimizu @ aim.ac
2005年 9月 1日 (木) 13:36:24 JST


おせわになります。榮水です。

ちょっと試してみましたが、PHPは

$result = ($case == 1 ? 'a' : $case == 2) ? 'b' : 'c';

というふうに解釈しているのではないでしょうか。

で、括弧の中は'a'が返るので真偽値としてはTRUEになり、
結果的に'b'が返ると。

ためしに上の式で'a'を'0'にしたところ、'c'が得られました。

なので、意図したとおりに解釈させるには、

$result = $case == 1 ? 'a' : ($case == 2 ? 'b' : 'c');

って書かないといけないみたいです。


で、ちょっとまじめな話をすると、?:の参考演算子は、
PHP:左結合
Perl:右結合
なので、こういう挙動の違いになるようですね。

以下、ご参照ください。
http://jp.php.net/manual/ja/language.operators.php#language.operators.precedence

っていうか、PHPって左結合だったんだ。初めて知った(^^;


>伊藤と申します。
>
>PHPの三項演算子についてですが、
>三項演算子にはswitchに似た次のような書き方がありますが
>
>case1 ? expression1:
>case2 ? expression2:
>case3 ? expression3:
>     ...
>        default-expression
>
>次のコードをPHPとPerlで実行すると結果が違います。
>PHPでの動作が間違っているのか、上記の書き方は利用できないのでしょうか?
>
>////////////////////////////////////
>$case=1;
>$result=
>($case==1)?	'a':
>($case==2)? 'b':
>			'c';
>echo $result;
>
>PHPの実行結果
>b
>
>Perlの実行結果
>a
>////////////////////////////////////
>
>
>ご存知の方いましたら、宜しくお願いします。
>
>_______________________________________________
>PHP-users mailing list  PHP-users @ php.gr.jp
>http://ns1.php.gr.jp/mailman/listinfo/php-users
>PHP初心者のためのページ - 質問する前にはこちらをお読みください
>http://www.php.gr.jp/php/novice.php3

*=================================*
株式会社エイム
榮水 貴行
Mail: t-eimizu @ aim.ac
*=================================*


PHP-users メーリングリストの案内