繁体   English   中英

PHP 5.3 中 ++ 运算符的奇怪行为

[英]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)。

来源: http : //php.net/operators.increment

在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM