6
$a = 'a';
print ($a+1);
print ($a++);
print $a;

出力は次のとおりです。1 a b

したがって、インクリメント演算子がその仕事をしたことは明らかですが、ケースで出力が「1」である理由がわかりません$a+1。誰でも説明できますか?

4

4 に答える 4

9

PHP は C ではないので、C で'a' + 1はありません'b'

'a'数値コンテキストでは0、および0+1 = 1です。

php> echo (int)'a';
0

接尾辞/接頭辞インクリメント演算子が C の文字であるかのように機能するという事実は PHP の厄介な「機能」のようです。特に、この場合、デクリメント演算子はノーオペレーションであるためです。

インクリメント'z'すると、さらに悪化します。

php> $a = 'z';
php> echo ++$a
aa
于 2012-05-06T08:17:53.010 に答える
3

その理由は、PHP がコンテキスト固有の方法で変数を扱うためです。Visual Basic に少し似ています。

'a' + 1は数学的加算を使用します。このコンテキストaでは、 は数値として解釈されるため、0 と見なされます (C に精通している場合は、文字列 "a" を に入力するようなものですatoi())。

式を使用すると、結果は文字列連結を使用し'a' . 1た結果になります。a1

期待した結果 ( ) を得るには、(最初の) 文字の ASCII 値を明示的に返すbを使用する必要がchr(ord('a') + 1)あります。ord()

$a++は特殊なケースであり、基本的に、変数として値自体ではなく ascii 値を見るオーバーロードです。

于 2012-05-06T08:18:40.380 に答える