Quelle est la différence entre WordPress random_int () et la fonction intégrée PHP random_int ()?


10

Quelle est la différence entre la fonction définie par WordPress random_int()et la fonction intégrée PHP random_int()?

De plus, s'il y a une différence, comment l'interpréteur PHP comprend-il laquelle des deux fonctions j'appelle?

Réponses:


17

WordPress est vieux. En fait, il est plus ancien que PHP7, dans lequel PHP a été introduit random_int(). WP voulait / avait besoin de cette fonctionnalité avant, donc une autre méthode a été implémentée.

comment l'interpréteur PHP comprend laquelle des deux fonctions que j'appelle?

Bonne question. L'interprète ne comprend pas cela. Et donc, si vous aviez PHP7 et définiriez cette fonction nouvelle, vous obtiendriez une erreur. C'est pourquoi. le fichier avec la définition de fonction n'est chargé que lorsqu'il random_int()n'est pas disponible par défaut.

wp-includes / random_compat / random.php les lignes 212-214 sont

if (!function_exists('random_int')) {
    require_once $RandomCompatDIR.'/random_int.php';
}
  • Donc, si votre serveur est PHP7 et que le propre de PHP random_int()est appelable, celui-ci est utilisé et le fichier n'est jamais inclus.

  • Si votre serveur n'est pas PHP7 ou que le PHP random_int()n'est pas appelable pour quelque raison que ce soit, le fichier est inclus et une autre implémentation sera donnée.

Cela est fait, donc WordPress peut fonctionner sur différents systèmes. Ceux avec PHP5 et ceux avec PHP7.

En quoi est-ce différent? Je ne peux pas vraiment en parler. Les fichiers que WP utilise semblent provenir de ce random_compatréférentiel , qui est également lié à partir du document PHP (et suggéré si vous n'avez pas la propre implémentation de PHP disponible).

Une différence rapide que j'ai déjà vue: PHP random_int()essaie d'utiliser getrandom(2)sur les machines Linux, tandis que le compat random_int()n'utilise que /dev/urandom.

En cas de doute, j'utiliserais les versions du système (PHP) au lieu de celles introduites par le logiciel (WP). Mais ce n'est que mon opinion.


"En cas de doute, j'utiliserais les versions du système" Il semble que vous expliquiez au début de votre réponse que vous ne pouvez pas choisir. Soit il est déjà là (PHP> = 7) et WP ne le chargera pas, soit il n'est pas là donc WP le chargera. Y a-t-il un terrain d'entente où vous vous choisissez (désactivant explicitement la fonction de WP, je présume)? Bien sûr, vous pouvez apporter toutes les modifications que vous souhaitez. Mais cela vaut-il la peine d'aller non standard dans ce qui semble être une fonction relativement centrale?
Mast

@Mast Il y a toujours un moyen. Vous pouvez charger ce référentiel et simplement changer les noms de fonction ( random_int_custom()par exemple) pour qu'il soit utilisable. Le dernier commentaire était plutôt conçu comme: il est logique que cela fonctionne de cette façon (plutôt en utilisant les fonctions système que les vôtres), et je ne recommanderais pas d'aller plus loin pour contourner cela
kero

1
Vous ne recommandez pas d'aller plus loin, d'accord. C'est tout ce que je voulais savoir :-)
Mât
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.