[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 メーリングリストの案内