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

问题描述

至少在我的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

这是预期的行为吗?我应该提交错误报告或其他内容吗?您知道解决方法吗?

编辑:提起bug#80212

解决方法

那是documented behaviour(强调我的意思):

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

,

这就是我最后要去的地方:

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

不会称它为优雅,但我会称其为功能