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

野村 利治 dotnet.flora @ gmail.com
2010年 8月 25日 (水) 20:04:57 JST


野村です。
$aと$a--が評価される順番の問題ですね。
--$aではないので$a--の評価結果が0にはならないはずです。
ただし、$aが$a--より後に評価されるのであるのなら、0となり得ます。
A + B の評価がB A A+Bの順で行われるのなら、前者が2、後者が1となり得ますね。
ただ、そうでないのであれば、前者と後者の値は両方とも2になるはずです。
文法上、規定はなく実装上の問題と思われます。
----
野村

On 2010/08/25, at 19:21, Shindo <shindo @ atsystem.jp> wrote:

> 進藤です。
> 
> ちなみに、PHP4.4.1 では、以下の様な結果になります。
> 
> 私は、こちらの結果が文法上正しいと思っています。
> なぜなら、$a-- は、1 と評価されてから $a がデクリメントされるのが
> 演算子の評価順として適正だと思います。
> 
> $ php -v
> PHP 4.4.1 (cli) (built: Nov  3 2005 19:50:09)
> Copyright (c) 1997-2004 The PHP Group
> Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
> $ php -r '$a = 1; echo ($a + 0 + $a--) . "\n";'
> 2
> $ php -r '$a = 1; echo ($a + $a-- + 0) . "\n";'
> 2
> 
> 
>> 関根と申します。
>> 
>> 最初の式は
>> (($a + 0) + $a--)
>> なので、($a + 0) が 1
>> そうすると (1 + $a--) なので次の式評価で
>> (1 + 1) で $a が 0 となります。
>> 最終的には ((1 + 0) + 1) なので 2 です。
>> 
>> 二番目の式は
>> (($a + $a--) + 0) ---> ($a + $a--) と同じ
>> なので、($a + $a--) が実行される前に $a-- が評価されて、$a が 0 になり 1
>> を返すので、(0 + 1) となり
>> 最終的には ((0 + 1) + 0) なので 1 です。
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3


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