Was ist der Unterschied zwischen WordPress random_int () und der in PHP integrierten Funktion random_int ()?

10

Was ist der Unterschied zwischen der von WordPress definierten Funktion random_int()und der in PHP integrierten Funktion random_int()?

Wenn es einen Unterschied gibt, wie versteht der PHP-Interpreter, welche der beiden Funktionen ich aufrufe?

Juri Rudi
quelle

Antworten:

17

WordPress ist alt. Tatsächlich ist es älter als PHP7, in das PHP eingeführt wurde random_int(). WP wollte / brauchte diese Funktionalität schon einmal, daher wurde eine andere Methode implementiert.

Wie versteht der PHP-Interpreter, welche der beiden Funktionen ich aufrufe?

Gute Frage. Der Dolmetscher versteht das nicht. Wenn Sie also PHP7 hätten und diese Funktion neu definieren würden, würden Sie eine Fehlermeldung erhalten. Deshalb. Die Datei mit der Funktionsdefinition wird nur geladen, wenn random_int()sie standardmäßig nicht verfügbar ist.

wp-include / random_compat / random.php Zeilen 212-214 sind

if (!function_exists('random_int')) {
    require_once $RandomCompatDIR.'/random_int.php';
}
  • Wenn Ihr Server also PHP7 ist und der eigene von PHP random_int()aufrufbar ist, wird dieser verwendet und die Datei wird nie aufgenommen.

  • Wenn Ihr Server nicht PHP7 ist oder PHPs eigener random_int()aus irgendeinem Grund nicht aufrufbar ist, wird die Datei eingeschlossen und eine weitere Implementierung angegeben.

Dies geschieht, damit WordPress auf verschiedenen Systemen ausgeführt werden kann. Die mit PHP5 und die mit PHP7.

Wo ist der Unterschied? Ich kann nicht wirklich mit ihm sprechen. Die von WP verwendeten Dateien scheinen aus diesem random_compatRepository zu stammen , das auch aus dem PHP-Dokument verknüpft ist (und empfohlen wird, wenn Sie keine PHP-eigene Implementierung zur Verfügung haben).

Ein kurzer Unterschied, den ich bereits gesehen habe: PHPs random_int()versuchen, getrandom(2)auf Linux-Computern zu verwenden, während der Kompat random_int()nur verwendet wird /dev/urandom.

Im Zweifelsfall würde ich die Versionen des Systems (PHP) anstelle der von der Software (WP) eingeführten verwenden. Das ist aber nur meine Meinung.

Kero
quelle
"Im Zweifelsfall würde ich die Systemversionen verwenden." Es hört sich so an, als würden Sie zu Beginn Ihrer Antwort erklären, dass Sie sich nicht entscheiden können. Entweder ist es bereits vorhanden (PHP> = 7) und WP lädt es nicht oder es ist nicht vorhanden, sodass WP es lädt. Gibt es einen Mittelweg, auf dem Sie sich selbst auswählen (die Funktion von WP explizit deaktivieren, nehme ich an)? Natürlich können Sie jede gewünschte Änderung vornehmen. Aber lohnt es sich, in einer scheinbar relativ zentralen Funktion nicht dem Standard zu entsprechen?
Mast
@Mast Es gibt immer einen Weg. Sie können dieses Repository laden und einfach die Funktionsnamen ( random_int_custom()z. B.) ändern, damit es verwendet werden kann. Der letzte Kommentar war eher als gedacht: Es macht Sinn, dass es so funktioniert (eher mit Systemfunktionen als mit Ihren eigenen), und ich würde nicht empfehlen, die zusätzlichen Meilen zu gehen, um dies zu umgehen
kero
1
Sie empfehlen nicht, die zusätzlichen Meilen zu fahren, ok. Das ist alles was ich wissen wollte :-)
Mast