2010年8月27日

[PHP-users 35356] Re:演算子の評価順位

-
% php -v
PHP 5.2.14 (cli) (built: Jul 27 2010 06:20:40)
...
% php -r '$a = 1; echo ($a + $a-- + 0 ) . ", $a" ."\n";'
1, 0
% php -r '$a = 1; echo ($a + $a++ + 0 ) . ", $a" ."\n";'
3, 2


% php -r '$a = 1; echo ($a + 0 + $a--) . ", $a" ."\n";'
2, 0
% php -r '$a = 1; echo ($a + 0 + $a++) . ", $a" ."\n";'
2, 2
--

"$a + $a-- + 0" のときは、$a-- が先に評価されていますが、
"$a + 0 + $a--" のときは、 "$a + 0 + $a" まで処理されてから
$a-- が評価されているような結果と見えます。 ++ 演算子に
ついても同じですね。
ちょっと矛盾を感じますね。


-- 演算子は結合しないで、+ 演算子よりも優先されるとすると、
 $a=1; echo ($a + 0 + $a--) ;
は、
 echo (1 + 0 + 0);
となるべきと思います。

# あれ、perlも同じ結果になるなあ。。。

2010/8/26 Shindo <shindo@xxxxx>:
> 進藤です。
>
> http://www.php.net/manual/ja/language.operators.precedence.php
> + - . の結合時の評価は left
> ++ -- の結合時の評価は 結合しない
>
> http://www.php.net/manual/ja/language.operators.increment.php
> $a-- 後置減算子 $a を返し、$a から 1 を引きます。
>
> これらをベースに考えると
> $a = 1;
> echo ($a + $a-- + 0)
>
> 1)最初に左の$aが評価されて、次に+演算が
> (1 + $a-- +0)
> 2)次に右側の$aが評価されて、その後、$aはデクリメントされ
> (1 + 1 + 0)
> 3)式の評価として次の+演算が評価され
> 2
> が素直かなと
>
> ただ、文法上は式の評価が
> ($a + ($a-- + 0)) と見なすことも可能ですから
> (1 + 0) で $a が0になり
> (0 + (1 + 0))
> 1
> もアリですね。
>
> ただ、互換性を考えるとPHP4の評価順がPHP5でも再現されて欲しいかなと
>
>
>>野村です。
>>$aと$a--が評価される順番の問題ですね。
>>--$aではないので$a--の評価結果が0にはならないはずです。
>>ただし、$aが$a--より後に評価されるのであるのなら、0となり得ます。
>>A + B の評価がB A A+Bの順で行われるのなら、前者が2、後者が1となり得ますね。
>>ただ、そうでないのであれば、前者と後者の値は両方とも2になるはずです。
>>文法上、規定はなく実装上の問題と思われます。
>
>
> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> 進藤寿則@アットシステム _/_/
> e-mail shindo@atsystem.jp _/
> Phone 022-385-1593 Fax 385-1595 _/
>
> _______________________________________________
> PHP-users mailing list PHP-users@xxxxx
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>

--
Jun Kuwamura
rC Cn
^
~
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年8月27日 15:52
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97965
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。