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

输出是:1 a b

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

4

4 回答 4

9

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
于 2012-05-06T08:17:53.010 回答
3

原因是 PHP 以特定于上下文的方式处理变量。它有点类似于 Visual Basic。

该表达式'a' + 1使用数学加法。在这种情况下a被解释为一个数字,所以它会被认为是 0(如果你熟悉 C,这就像将字符串 "a" 输入atoi())。

如果您使用表达式'a' . 1,结果将是a1由于它使用字符串连接。

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

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

于 2012-05-06T08:18:40.380 回答
1

http://php.net/manual/en/types.comparisons.php,“a”+1 被执行为 0+1。有些语言 (C#) 会将 (string)+(int) 翻译成 (string)+(string),而 PHP 则相反:(int)+(int)。

改为强制字符串连接:"a" . 1产生'a1'。

于 2012-05-06T08:20:40.923 回答
0

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

于 2012-05-06T08:20:13.717 回答