Tra le nuove funzionalità di PHP 8.2 troviamo anche una nuova estensione dedicata alle operazione di randomizzazione e alla generazione di numeri casuali. Per questo scopo è stata introdotta anche una nuova classe che prende in nome di Randomizer
e che può essere richiamata in questo modo:
use Random\Randomizer;
Un semplice esempio di randomizzazione potrebbe essere quindi il seguente:
use Random\Randomizer;
$randomizer = new Randomizer();
$randomizer->shuffleBytes('Bart Simpson');
Da cui è possibile attendersi risultati differenti come:
aSpironB tsm
o
amot BnrispS
Nello stesso modo si potrebbe alterare l'ordine dei valori di un array, sempre attraverso il metodo shuffleBytes()
:
$randomizer->shuffleBytes(['w', 'x', 'y', 'z']);
ottenendo l'output che segue o qualsiasi altro output reso possibile dalla combinazione dei valori precedentemente attribuiti al vettore:
['y', 'z', 'x', 'w']
Chiaramente, shuffleBytes()
non è l'unico dei metodi disponibili, se per esempio si lavora con i numeri interi è possibile utilizzare getInt()
che, dato un intervallo di valori, permette di estrarne uno compreso tra i due parametri introdotti rispettivamente come limite minimo e limite massimo.
Ad esempio un'espressione come questa:
$randomizer->getInt(3, 53);
potrebbe restituire un risultato uguale a "7", "22" o "31" in modo del tutto casuale.
I generatori di numeri pseudo-casuali
PHP permette di associare l'utilizzo di un PRNG (Pseudo-Random Number Generator), cioè un generatore di numeri pseudo-casuali, alla classe Randomizer
.
Non è questa la sede per stabilire cosa sia un numero pseudo-casuale ma per semplicità definiamolo come un valore che viene generato in modo simile ad un numero casuale che per essere tale dovrebbe essere ottenuto in assenza di qualsiasi criterio di selezione (quindi totalmente random).
Mt19937
è ad esempio un engine PRNG a cui può essere associato un valore (denominato seed) per la randomizzazione. A tal proposito è possibile riproporre l'ultimo esempio presentato in questo modo:
use Random\Engine\Mt19937;
use Random\Randomizer;
$randomizer = new Randomizer(new Mt19937(31));
$randomizer->getInt(3, 53);
Mt19937
, utile in fase di test e debugging, permetterà di ottenere sempre il medesimo numero pseudo-casuale indipendentemente dal numero di esecuzioni.