PHP中字符串错误的减量运算符?

PHP中字符串错误的减量运算符?,php,string,increment,decrement,Php,String,Increment,Decrement,至少在我的PHP版本中,有关字符串的递增/递减运算符函数不一致。我的意思是: php > echo phpversion(); 7.4.11 php > $test = 'abc12'; php > // increment works as expected php > echo(++$test); abc13 php > echo(++$test); abc14 php > echo(++$test); abc15 php > // but decr

至少在我的PHP版本中,有关字符串的递增/递减运算符函数不一致。我的意思是:

php > echo phpversion();
7.4.11
php > $test = 'abc12';
php > // increment works as expected
php > echo(++$test);
abc13
php > echo(++$test);
abc14
php > echo(++$test);
abc15
php > // but decrement fails
php > echo(--$test);
abc15
php > echo(--$test);
abc15
php > echo(--$test);
abc15
这是预期的行为吗?我应该提交错误报告还是什么?你知道有什么解决办法吗


编辑:归档

以下是我最终选择的内容:

function decrement($str) {
  $matches = preg_split('/(\d+)\z/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
  @--$matches[1];
  return implode($matches);
}

我不认为它很优雅,但我认为它很实用。

以下是我最终选择的:

function decrement($str) {
  $matches = preg_split('/(\d+)\z/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
  @--$matches[1];
  return implode($matches);
}
我不认为它很优雅,但我认为它很实用。

这是我的重点:

PHP在处理字符变量的算术运算时遵循Perl的约定,而不是C。例如,在PHP和Perl中$a='Z'$a++;将$a转换为'AA',而在C中a='Z';a++;将a转换为“[”(ASCII值“Z”为90,ASCII值“[”为91)。请注意,字符变量可以递增,但不能递减,即使如此,也只支持普通ASCII字母和数字(a-Z、a-Z和0-9)。递增/递减其他字符变量无效,原始字符串不变

这是我的重点:

PHP在处理字符变量而不是C的算术运算时遵循Perl的惯例。例如,在PHP和Perl中,$a='Z';$a++;将$a转换为'AA',而在C中,='Z';a++;将a转换为'['(ASCII值'Z'为90,'['为91)。请注意,字符变量可以递增,但不能递减,即使如此,也只支持普通ASCII字母和数字(a-z、a-z和0-9)。递增/递减其他字符变量无效,原始字符串不变


为什么要递增或递减字符串?递增/递减运算符只适用于具有单个数值的类型。更让我吃惊的是,递增运算符适用于
'abc12'
。Markus的问题是合理的。为什么希望能够以这种方式递增/递减非数值?每e:“递增/递减运算符只影响数字和字符串。数组、对象、布尔值和资源不受影响。递减NULL值也没有影响,但递增它们会得到1。”我的实际用例是用于命名空间版本控制。我知道您使用“字符串”输入最广义的内容,但这是不合理的。您如何增加“Wonderful”这样的字符串你不能,因为它在任何方面都不是数字。所以我们可能同意不是所有的字符串都能工作?哈哈,好吧,你来了。是的,我同意手册不是很清楚。为什么你要增加或减少字符串?增加/减少操作符只应该对具有单个数值的类型工作。这让我更惊讶在增量工作于
'abc12'
。Markus的问题是合理的。为什么您希望能够以这种方式增加/减少非数值?根据:“递增/递减运算符只影响数字和字符串。数组、对象、布尔值和资源不受影响。递减NULL值也没有影响,但递增它们会得到1。”我的实际用例是用于命名空间版本控制。我知道您使用“字符串”键入最广义的字符,但这是不合理的。如何增加“Wonder”这样的字符串你不能,因为它在任何方面都不是数字。所以我们可能同意不是所有的字符串都能工作?哈哈,好吧,你来了。是的,我同意手册不是那么清楚。根据我的当前状态,“这个重要的音符应该更突出”。而且它仍然令人困惑地不一致。根据我的当前状态,“这个重要的音符。”注释应该更加突出“,但它仍然令人困惑地不一致。