增量角色有效,但添加没有。为什么?

时间:2012-05-06 08:14:37

标签: php

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

输出为:1 a b

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

4 个答案:

答案 0 :(得分:7)

PHP不是C,因此'a' + 1不是'b'

数字上下文中的

'a'00+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.