PHP ti permette di incrementare le stringhe. Perché?
Andiamo avanti un po '. Prendi il seguente codice:
$string = '9ZzZ';
echo ++$string; // 10AaA
Da un punto di vista purista questo può sembrare un non senso, tuttavia, puoi vedere che qui c'è chiaramente uno schema. Ogni colonna viene trattata come un insieme, (numeri, lettere maiuscole, lettere minuscole). Quindi ogni set si comporta come il proprio sistema di numerazione.
Il manuale conferma questo e dichiara di aver copiato Perl:
PHP follows Perl's convention when dealing with arithmetic operations on character variables and not C's. For example, in PHP and Perl $a = 'Z'; $a++; turns $a into 'AA', while in C a = 'Z'; a++; turns a into '[' (ASCII value of 'Z' is 90, ASCII value of '[' is 91). Note that character variables can be incremented but not decremented and even so only plain ASCII alphabets and digits (a-z, A-Z and 0-9) are supported. Incrementing/decrementing other character variables has no effect, the original string is unchanged.
Ma in realtà non spiega perché.
il manuale di Perls afferma qualcosa di molto simile, ma di nuovo si passa a no spiegazione del motivo per cui è stata aggiunta questa magia extra.
The auto-increment operator has a little extra builtin magic to it. If you increment a variable that is numeric, or that has ever been used in a numeric context, you get a normal increment. If, however, the variable has been used in only string contexts since it was set, and has a value that is not the empty string and matches the pattern /^[a-zA-Z][0-9]\z/ , the increment is done as a string, preserving each character within its range, with carry
Allo stesso modo enigmatico:
The auto-decrement operator is not magical.
Perché l'incremento è così importante ma non il decremento? E perché dovrebbero farlo affatto?
È logico a modo suo, e posso vederne gli usi (anche se potresti scrivere qualcosa di più ovvio al suo posto). Posso persino vedere perché non hanno dovuto eseguire il millisecode del set di caratteri ASCII (poiché potrebbe non essere il set di caratteri utilizzato dall'utente) o attraverso il set di caratteri definito in php.ini in quanto ciò potrebbe alterare in modo significativo il comportamento tra i sistemi. Allora perché preoccuparsi del tutto?