mt_getrandmax()
Scopri la funzione mt_getrandmax() in PHP, che restituisce il valore massimo generabile dalla funzione mt_rand().
La funzione mt_getrandmax() in PHP restituisce il più grande intero possibile che mt_rand() può generare. Non accetta argomenti e restituisce un valore costante per l'intera durata dello script, quindi viene utilizzata principalmente come limite superiore noto quando si ridimensionano o normalizzano numeri casuali.
Questa pagina tratta ciò che la funzione restituisce, la sintassi, il perché il valore è importante, come trasformarlo in un float casuale, gli errori comuni e come differisce dalla più vecchia getrandmax().
Cos'è la Funzione mt_getrandmax()?
mt_getrandmax() è una funzione PHP integrata che restituisce un int — il valore più grande che mt_rand() può produrre. Poiché mt_rand() utilizza il generatore di numeri pseudo-casuali Mersenne Twister, questa funzione espone il limite superiore dell'intervallo di output di quel generatore.
Il valore dipende dalla piattaforma ma, su ogni build moderna di PHP, è 2147483647 (2^31 - 1). Non cresce sui sistemi a 64 bit — mt_rand() opera sempre nell'intervallo a 32 bit, quindi mt_getrandmax() restituisce lo stesso numero ovunque. Trattalo come una costante per la durata dello script.
Sintassi
mt_getrandmax(): int- Parametri: nessuno.
- Valore restituito: il numero intero massimo che
mt_rand()può restituire.
Come Usare la Funzione mt_getrandmax()
Usare mt_getrandmax() è semplice — chiamala senza argomenti. Ecco un esempio base:
Utilizzo di base
Il codice sopra recupera il limite superiore e lo memorizza in una variabile per un uso successivo.
Definire un intervallo esplicito
Puoi combinare mt_getrandmax() con mt_rand() per rendere esplicito l'intero intervallo di output. Le due chiamate seguenti sono equivalenti — chiamare mt_rand() senza argomenti restituisce già un valore compreso tra 0 e mt_getrandmax():
<?php
$max = mt_getrandmax();
$randomNumber = mt_rand(0, $max);
echo $randomNumber, "\n"; // some value in 0..2147483647
echo mt_rand(), "\n"; // identical range, no arguments needed
?>Generare un Float Casuale tra 0 e 1
L'uso reale più comune di mt_getrandmax() è la normalizzazione di un intero casuale in un float nell'intervallo [0, 1). Dividi il numero intero casuale per il massimo:
<?php
$ratio = mt_rand() / (mt_getrandmax() + 1);
echo $ratio; // e.g. 0.4173...
?>Aggiungere 1 al divisore mantiene il risultato strettamente al di sotto di 1. Per scalare in qualsiasi intervallo [$min, $max], moltiplica il rapporto per l'ampiezza:
<?php
$min = 5;
$max = 25;
$value = $min + $ratio * ($max - $min);Errori Comuni
- Non è un setter.
mt_getrandmax()si limita a leggere il limite superiore — non è possibile modificarlo. Per vincolare l'output, passaminemaxamt_rand(). - Non accetta argomenti. Passarne qualcuno genererà un
ArgumentCountErrorin PHP 8+. - Non è crittograficamente sicuro. Né
mt_rand()né il suo intervallo sono sicuri per password, token o chiavi. Per la casualità critica per la sicurezza usarandom_int()orandom_bytes(). - Evita il trucco del modulo per gli intervalli.
mt_rand() % $nintroduce distorsioni verso i valori più piccoli. Preferiscimt_rand(0, $n - 1).
mt_getrandmax() vs getrandmax()
PHP include una coppia parallela di generatori. getrandmax() riporta il limite per la più vecchia funzione rand(), mentre mt_getrandmax() riporta il limite per mt_rand(). Da PHP 7.1, rand() e mt_rand() utilizzano internamente lo stesso motore Mersenne Twister, quindi entrambe le funzioni restituiscono 2147483647 — ma dovresti comunque abbinare ciascun *getrandmax() al generatore corrispondente per chiarezza.
Conclusione
mt_getrandmax() restituisce il limite superiore del generatore Mersenne Twister di PHP (2147483647 nelle build moderne). Il suo principale utilizzo è come divisore per produrre float casuali normalizzati e intervalli scalati. Per la casualità sicura usa random_int(), e ricorda che la funzione è di sola lettura — usa mt_rand($min, $max) per vincolare effettivamente i risultati. Vedi anche mt_srand() per il seeding del generatore.