¿Cuál es la diferencia entre WordPress random_int () y la función incorporada de PHP random_int ()?

10

¿Cuál es la diferencia entre la función definida de WordPress random_int()y la función integrada de PHP random_int()?

Además, si hay una diferencia, ¿cómo entiende el intérprete de PHP a cuál de las dos funciones estoy llamando?

Juri Rudi
fuente

Respuestas:

17

WordPress es viejo. De hecho, es más antiguo que PHP7, en el que se introdujo PHP random_int(). WP quería / necesitaba esta funcionalidad antes, por lo que se implementó otro método.

¿Cómo entiende el intérprete PHP a cuál de las dos funciones estoy llamando?

Buena pregunta. El intérprete no entiende esto. Y por lo tanto, si tuviera PHP7 y definiera esta función como nueva, obtendría un error. Esta es la razón por. el archivo con la definición de función solo se carga cuando random_int()no está disponible de forma predeterminada.

wp-includes / random_compat / random.php las líneas 212-214 son

if (!function_exists('random_int')) {
    require_once $RandomCompatDIR.'/random_int.php';
}
  • Entonces, si su servidor es PHP7 y el propio PHP random_int()es invocable, este se usa y el archivo nunca se incluye.

  • Si su servidor no es PHP7 o el propio PHP random_int()no es invocable por alguna razón, el archivo está incluido y se le dará otra implementación.

Esto se hace, por lo que WordPress puede ejecutarse en diferentes sistemas. Aquellos con PHP5 y aquellos con PHP7.

¿Cómo es diferente? Realmente no puedo hablar con eso. Los archivos que WP usa parecen ser de este random_compatrepositorio , que también está vinculado desde el documento de PHP (y sugerido si no tiene disponible la implementación de PHP).

Una diferencia rápida que ya vi: PHP random_int()intenta usar getrandom(2)en máquinas Linux, mientras que la compatibilidad random_int()solo usa /dev/urandom.

En caso de duda, usaría las versiones del sistema (PHP) en lugar de las introducidas por el software (WP). Pero esa es solo mi opinión.

kero
fuente
"En caso de duda, usaría las versiones del sistema" Parece que usted explica al comienzo de su respuesta que no puede elegir. O ya está allí (PHP> = 7) y WP no lo cargará, o no está allí, por lo que WP lo cargará. ¿Hay un término medio en el que te eliges (supongo que deshabilitas la función de WP explícitamente)? Claro, puedes hacer cualquier modificación que desees. ¿Pero vale la pena no ser estándar en lo que parece una función relativamente básica?
Mástil
@ Mástil Siempre hay un camino. Puede cargar ese repositorio y simplemente cambiar los nombres de las funciones ( random_int_custom()por ejemplo) para que sea utilizable. El último comentario fue más bien como: tiene sentido que funcione de esta manera (en lugar de utilizar funciones del sistema que las suyas propias), y no recomendaría hacer un esfuerzo adicional para evitar esto
kero
1
No recomiendas ir más allá, está bien. Eso es todo lo que quería saber :-)
Mástil