增量字符有效,但添加不起作用.为什么


Increment character works but adding doesn't. Why?

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

输出为:1 a b

所以很明显增量运算符完成了它的工作,但我不明白为什么输出是"1"以防万一$a+1.谁能解释一下?

PHP 不是

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,因为它使用字符串连接。

为了得到你期望的结果(b),你必须使用chr(ord('a') + 1),其中ord()显式返回(第一个)字符的ASCII值。

$a++是一种特殊情况,本质上是重载查看 ASCII 值而不是值本身作为变量。

从 http://php.net/manual/en/types.comparisons.php 开始,"a"+1 作为 0+1 执行。某些语言(C#)将(string)+(int)翻译成(string)+(string),而PHP则相反:(int)+(int)。

强制字符串连接:"a" . 1生成"a1"。

当你执行加法时,PHP 会尝试将 'a' 转换为整数。就像你在 C 中使用 atoi 一样,'a' 被理解为 0。因此,0 + 1 为 1。