[英]Strange behaviour of ++ operator in PHP 5.3
观看以下代码:
$a = 'Test';
echo ++$a;
这将输出:
Tesu
问题是,为什么?
我知道“u”在“t”之后,但为什么不打印“1”???
PHP文档:
此外,正在递增或递减的变量将转换为适当的数字数据类型——因此,以下代码将返回 1,因为字符串 Test 首先转换为整数 0,然后递增。
PHP 在处理字符变量而不是 C 的算术运算时遵循 Perl 的约定。 例如,在 Perl 中 'Z'+1 变成 'AA',而在 C 中 'Z'+1 变成 '[' ( ord('Z') == 90, ord('[') == 91 ) . 请注意,字符变量可以递增但不能递减,即使如此,也仅支持纯 ASCII 字符(az 和 AZ)。
在 PHP 中,您可以增加字符串(但您不能使用加法运算符“增加”字符串,因为加法运算符会导致字符串转换为int
,您只能使用增量运算符来“增加”字符串!...见最后一个例子):
所以"a" + 1
在"z"
"a" + 1
"aa"
之后就是"b"
"aa"
,依此类推。
所以在"Test"
是"Tesu"
在使用 PHP 的自动类型强制时,您必须注意上述情况。
<?php
$a="+10.5";
echo ++$a;
// Output: 11.5
// Automatic type coercion worked "intuitively"
?>
<?php
$a="$10.5";
echo ++$a;
// Output: $10.6
// $a was dealt with as a string!
?>
如果你想处理字母的 ASCII 序数,你必须做一些额外的工作。
如果您想将字母转换为它们的 ASCII 序数,请使用ord() ,但这一次只能处理一个字母。
<?php
$a="Test";
foreach(str_split($a) as $value)
{
$a += ord($value); // string + number = number
// strings can only handle the increment operator
// not the addition operator (the addition operator
// will cast the string to an int).
}
echo ++$a;
?>
以上利用了字符串只能在 PHP 中递增的事实。 不能使用加法运算符增加它们。 在字符串上使用加法运算符将导致它被强制转换为int
,因此:
<?php
$a = 'Test';
$a = $a + 1;
echo $a;
// Output: 1
// Strings cannot be "added to", they can only be incremented using ++
// The above performs $a = ( (int) $a ) + 1;
?>
上面将尝试在添加1
之前将“ Test
”转换为(int)
。 将“ Test
”转换为(int)
结果为0
。
注意:您不能减少字符串:
请注意,字符变量可以递增但不能递减,即使如此,也仅支持纯 ASCII 字符(az 和 AZ)。
前面的意思是echo --$a;
实际上将打印Test
而不更改字符串。
PHP 中的增量运算符在内部处理字符串的序数值。 字符串在递增之前不会转换为整数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.