【问题标题】:Increment behavior on strings - PHP easter egg?字符串的增量行为 - PHP 复活节彩蛋?
【发布时间】:2012-02-11 17:09:12
【问题描述】:
$var = 'test_1';
var_dump(++$var); // string(6) "test_2" 

$var2 = '1_test';
var_dump(++$var2); // string(6) "1_tesu"

$var3 = 'test_z';
var_dump(++$var3); // string(6) "test_a"

$var4 = 'test_';
var_dump(++$var4); // string(5) "test_"

显然,如果最后一个字符是数字,则对字符串使用增量运算符具有增加数字的效果,如果最后一个字符在字母表中,则增加字母然后重置为一次 z,并且没有对非字母数字字符的影响。

这是许多脚本语言都期望的标准功能,还是我只是找到了一个 PHP 复活节彩蛋?

【问题讨论】:

标签: php types increment


【解决方案1】:

PHP 在处理算术运算时遵循 Perl 的约定 关于字符变量而不是 C 的。例如,在 PHP 和 Perl 中 $a = 'Z'; $a++;将 $a 变成 'AA',而在 C 中 a = 'Z';一个++;变成 '['('Z' 的 ASCII 值为 90,'[' 的 ASCII 值为 91)。注意 字符变量可以递增但不能递减,即使如此 仅支持纯 ASCII 字符(a-z 和 A-Z)。 增加/减少其他字符变量没有效果, 原字符串不变。

->http://php.net/manual/en/language.operators.increment.php

【讨论】:

  • 不幸的是,文档含糊不清,在这方面写得不好:(例如,它不包括++"_1" -> "_2" 的情况,并且文档是错误的 关于"_Z"++ 变成了什么。
  • 关于可怕的文档:比较 "_Z"++"Z++" :-)
  • 至少"Z++" 很明显只是一个字符串中的一个“Z”和两个“+”。这里没有什么神奇的:)
  • @KingCrunch 呵呵,哎呀。 "Z"++ 甚至 ;-)
  • Curious ... 两者都不能在我的交互式 shell (php -a) 中工作,说“unspected T_INC” ...啊,我明白了:不适用于常量,仅适用于变量 ^ ^ 从未使用过,从未注意到。现在我知道了。
【解决方案2】:

【讨论】:

    【解决方案3】:

    这不是复活节彩蛋。它在 PHP 中是预期的,但在其他语言中并不常见。 (至少不增加字母。)在大多数情况下,PHP 将包含数字的字符串视为与数字相同。所以你也可以"2" * "2" 举例。

    【讨论】:

    • 示例与帖子不同。这将表明"test"++ 将类似于"test" + 1,这确实不会继续。 ++ 行为是“特殊的”,而 x+y 行为只是一种隐式转换。
    • 好点。实际上,我将有关数字的具体观点视为我第一个陈述的附录。但整体来看,你说得对,不清楚。
    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多