$a = 'a';
print ($a+1);
print ($a++);
print $a;
出力は次のとおりです。1 a b
したがって、インクリメント演算子がその仕事をしたことは明らかですが、ケースで出力が「1」である理由がわかりません$a+1
。誰でも説明できますか?
$a = 'a';
print ($a+1);
print ($a++);
print $a;
出力は次のとおりです。1 a b
したがって、インクリメント演算子がその仕事をしたことは明らかですが、ケースで出力が「1」である理由がわかりません$a+1
。誰でも説明できますか?
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
その理由は、PHP がコンテキスト固有の方法で変数を扱うためです。Visual Basic に少し似ています。
式'a' + 1
は数学的加算を使用します。このコンテキストa
では、 は数値として解釈されるため、0 と見なされます (C に精通している場合は、文字列 "a" を に入力するようなものですatoi()
)。
式を使用すると、結果は文字列連結を使用し'a' . 1
た結果になります。a1
期待した結果 ( ) を得るには、(最初の) 文字の ASCII 値を明示的に返すb
を使用する必要がchr(ord('a') + 1)
あります。ord()
$a++
は特殊なケースであり、基本的に、変数として値自体ではなく ascii 値を見るオーバーロードです。