私は初めて 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」という名前のセクションを見てください- インクリメント演算子を使用して、文字とシーケンスを追加できます文字列。
ドキュメントから取得したPHP は、文字変数の算術演算を処理するときに Perl の規則に従います。
たとえば、PHP と Perl では $a = 'Z'; $a++; $a を 'AA' に変換しますが、C では a = 'Z'; ++; a を '[' に変換します ('Z' の ASCII 値は 90、'[' の ASCII 値は 91)。文字変数はインクリメントできますが、デクリメントはできません。また、プレーン ASCII 文字 (az および AZ) のみがサポートされていることに注意してください。他の文字変数をインクリメント/デクリメントしても効果はなく、元の文字列は変更されません。
私は個人的にこの機能を使用したことはありませんが、C ではなく Perl の規則に従うことで、いくつかの利点が考えられます。これは、単に ASCII 値をインクリメントするのではなく、アルファ範囲内でインクリメントしています。
アルファ範囲内にとどまることで、基本的には 26進法の数字システム(文字を使用) について話していることになります。したがって、 (繰り越し) に9
インクリメントするのと同じように、 にインクリメントします。10
z
aa
すぐに思いつくのは、文字ハッシュ シーケンスです。
public static function nextSeed() {
// $seed = abc
return strtolower(++self::$seed);
// $seed = abd
}
そのようなシードは PHP の外部で管理される可能性がありますが、PHP がネイティブに提供することは有益であり、それ以外の場合はより多くのコードが必要になります。
その他の使用例: