Qual è la differenza tra WordPress random_int () e la funzione integrata PHP random_int ()?


10

Qual è la differenza tra la funzione definita di WordPress random_int()e la funzione integrata di PHP random_int()?

Inoltre, se c'è una differenza, come fa l'interprete PHP a capire quale delle due funzioni sto chiamando?

Risposte:


17

WordPress è vecchio. In effetti, è più vecchio di PHP7, in cui è stato introdotto PHP random_int(). WP desiderava / aveva bisogno di questa funzionalità prima, quindi è stato implementato un altro metodo.

come fa l'interprete PHP a capire quale delle due funzioni sto chiamando?

Buona domanda. L'interprete non lo capisce. E quindi, se avessi PHP7 e definissi questa funzione nuova, otterrai un errore. Ecco perché. il file con la definizione della funzione viene caricato solo, quando random_int()non è disponibile per impostazione predefinita.

wp-include / random_compat / random.php linee 212-214 sono

if (!function_exists('random_int')) {
    require_once $RandomCompatDIR.'/random_int.php';
}
  • Quindi, se il tuo server è PHP7 e quello di PHP random_int()è richiamabile, questo viene utilizzato e il file non viene mai incluso.

  • Se il tuo server non è PHP7 o PHP random_int()non è richiamabile per nessun motivo, il file viene incluso e verrà fornita un'altra implementazione.

Questo è fatto, quindi WordPress può essere eseguito su diversi sistemi. Quelli con PHP5 e quelli con PHP7.

Come è diverso? Non ci posso proprio parlare. I file utilizzati da WP sembrano provenire da questo random_compatrepository , anch'esso collegato al documento PHP (e suggerito se non si dispone dell'implementazione propria di PHP disponibile).

Una rapida differenza che ho già visto: PHP random_int()cerca di usare getrandom(2)su macchine Linux, mentre la compat random_int()usa solo /dev/urandom.

In caso di dubbio, utilizzerei le versioni del sistema (PHP) anziché quelle introdotte dal software (WP). Ma questa è solo la mia opinione.


"In caso di dubbio, utilizzerei le versioni del sistema" Sembra che tu spieghi all'inizio della tua risposta che non puoi scegliere. O è già presente (PHP> = 7) e WP non lo caricherà, oppure non è presente, quindi WP lo caricherà. C'è una via di mezzo in cui scegli te stesso (disabilitando esplicitamente la funzione di WP, presumo)? Certo, puoi apportare qualsiasi modifica tu voglia. Ma ne vale la pena di andare fuori standard in quella che sembra una funzione relativamente centrale?
Albero

@Mast C'è sempre un modo. È possibile caricare quel repository e modificare semplicemente i nomi delle funzioni ( random_int_custom()ad es.) Affinché siano utilizzabili. L'ultimo commento era piuttosto inteso come: ha senso che funzioni in questo modo (piuttosto usando le funzioni di sistema rispetto alle tue), e non consiglierei di fare le miglia extra per aggirare questo
kero

1
Non mi consiglia di andare miglia extra, ok. Questo è tutto ciò che volevo sapere :-)
Mast
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.