$a = 'a';
print ($a+1);
print ($a++);
print $a;
输出为:1 a b
很明显增量运算符完成了它的工作,但我不明白为什么输出是' 1'以防$a+1
。谁能解释一下?
答案 0 :(得分:7)
PHP不是C,因此'a' + 1
不是'b'
。
'a'
为0
和0+1 = 1
。
php> echo (int)'a';
0
后缀/前缀增量运算符做的工作就好像它是一个C char似乎是PHP的一个令人讨厌的“特性”。特别是因为在这种情况下减量运算符是无操作的。
当你增加'z'
时,它会变得更糟:
php> $a = 'z';
php> echo ++$a
aa
答案 1 :(得分:1)
原因是PHP以特定于上下文的方式处理变量。它有点类似于Visual Basic。
表达式'a' + 1
使用数学加法。在此上下文中,a
被解释为数字,因此它将被视为0(如果您熟悉C,则将字符串“a”输入atoi()
)。
如果你使用表达式'a' . 1
,结果将是a1
,因为它使用字符串连接。
要获得预期的结果(b
),您必须使用chr(ord('a') + 1)
,其中ord()
显式返回(第一个)字符的ASCII值。
$a++
是一个特殊情况,本质上是一个重载,它查看ascii值而不是值本身作为变量。
答案 2 :(得分:1)
从http://php.net/manual/en/types.comparisons.php开始,“a”+1执行为0 + 1。在某些语言(C#)将(string)+(int)转换为(string)+(string)的情况下,PHP则相反:(int)+(int)。
要强制执行字符串连接:"a" . 1
会产生'a1'。
答案 3 :(得分:0)
执行添加时,PHP会尝试将“a”转换为整数。就像你在C中使用atoi一样,'a'被解释为0.因此0 + 1是1.