2012-01-16 47 views
4
$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复活节彩蛋?

+3

http://www.php.net/manual/de/language.operators.increment.php#74639 – Yogu 2012-01-16 19:49:18

回答

5

PHP遵循了Perl的约定与算术运算 对字符变量,而不是C'S打交道时。例如,在PHP和Perl中$ a = 'Z'; $ A ++;将$ a变成'AA',而在C a ='Z'中;一个++;将a变成 '['('Z'的ASCII值是90,'['的ASCII值是91)。请注意, 字符变量可以递增但不递减,即使如此 也只支持纯ASCII字符(a-z和A-Z)。 递增/递减其他字符变量不起作用, 原始字符串不变。

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

+1

不幸的是,这个文档很模糊,没有很好地写在这个区域:(例如,它不包含'++“_ 1”' - >'“_2”'的情况,并且文档是错误的* ''_Z“++'变成 – 2012-01-16 19:54:40

+0

啊,很酷,RTFM,对不对?=) – 2012-01-16 19:55:27

+0

关于文档可怕:比较'”_Z“++'与'”Z ++“':-) – 2012-01-16 20:00:41

0

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

+5

的例子是不同的情况下,比所述柱。这将表明''test“++'将类似于”test“+ 1',这确实是*不*继续。 '++'行为是“特殊的”,而“x + y”行为则是隐式转换。 – 2012-01-16 19:51:54

+0

好点。实际上,我认为关于数字的具体问题是我第一次发言的附录。但从整体上看,你说得对,它不清楚。 – 2012-01-16 19:57:19