我是第一次学习 PHP,我发现该语言允许在字符串上使用增量运算符感到惊讶。
$foo = 'xyZ';
print ++$foo; // prints xzA
我能找到的围绕这个主题的教程只介绍了玩具示例。 如果您提到使用此“功能”有益的情况,我将不胜感激。
提前致谢!
I would be grateful if you mention a situation where using this 'feature' is beneficial.
这可能是一个非常有用的功能......
例子
$guess = "21661093e56e24cd60b10092005c4ac7";
$next = "aaaa";
$count = 0;
while(md5($next) !== $guess) {
$next ++;
$count ++;
}
printf("Found `%s` after %s loops", $next, number_format($count));
输出
Found `baba` after 17,602 loops
无论如何,我不打算很快破解任何 PIN 或密码
查看http://php.net/manual/en/language.operators.increment.php上名为“Example #1 Arithmetic Operations on Character Variables”的部分- 您可以使用增量运算符将字符和序列添加到字符串。
字符实际上是一个数字。你应该看看 ASCII 表 http://en.wikipedia.org/wiki/ASCII
将数字转换为字符 php 文档 http://php.net/manual/en/function.chr.php
$test = 'a';
$test++;
echo($test);
正如您在 ASCII 表中看到的那样,'a' = 97 和 'b' = 98 的数字表示因此显示了 'b'
取自文档,PHP 在处理字符变量的算术运算时遵循 Perl 的约定:
例如,在 PHP 和 Perl 中 $a = 'Z'; $a++; 将 $a 变成 'AA',而在 C 中 a = 'Z'; 一个++;将 a 转换为 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。请注意,字符变量可以递增但不能递减,即使如此,也仅支持纯 ASCII 字符(az 和 AZ)。增加/减少其他字符变量没有效果,原字符串不变。
虽然我个人没有使用过这个特性,但我可以通过遵循 Perl 的约定(而不是 C 的约定)想到一些好处。这是在 alpha 范围内递增,而不是简单地递增 ASCII 值。
通过保持在 alpha 范围内,基本上我们在谈论一个以 26 为基数的数字系统(使用字母)。因此,就像9
递增到10
(结转)一样,z
递增到aa
.
立即想到的是字符哈希序列。
public static function nextSeed() {
// $seed = abc
return strtolower(++self::$seed);
// $seed = abd
}
虽然这些种子很可能会在 PHP 之外进行管理,但 PHP 本身提供了原本需要更多代码的东西,这仍然是有益的。
其他用例: