$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 値を見るオーバーロードです。