$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。