Qual é a diferença entre o WordPress random_int () e a função interna PHP random_int ()?


10

Qual é a diferença entre a função definida pelo WordPress random_int()e a função integrada do PHP random_int()?

Além disso, se houver uma diferença, como o interpretador PHP entende qual das duas funções que estou chamando?

Respostas:


17

WordPress é antigo. De fato, é mais antigo que o PHP7, no qual o PHP foi introduzido random_int(). O WP queria / precisava dessa funcionalidade antes, então outro método foi implementado.

como o interpretador PHP entende qual das duas funções que estou chamando?

Boa pergunta. O intérprete não entende isso. E, portanto, se você tivesse o PHP7 e definiria essa função como nova, obteria um erro. Isso é por que. o arquivo com a definição da função é carregado apenas quando random_int()não está disponível por padrão.

As linhas wp-includes / random_compat / random.php 212-214 são

if (!function_exists('random_int')) {
    require_once $RandomCompatDIR.'/random_int.php';
}
  • Portanto, se o seu servidor for PHP7 e o próprio PHP puder ser chamado random_int(), este será usado e o arquivo nunca será incluído.

  • Se o seu servidor não for PHP7 ou o próprio PHP não puder ser chamado random_int()por qualquer motivo, o arquivo será incluído e outra implementação será fornecida.

Isso é feito, para que o WordPress possa ser executado em diferentes sistemas. Aqueles com PHP5 e aqueles com PHP7.

Como é diferente? Eu realmente não posso falar com isso. Os arquivos que o WP usa parecem pertencer a este random_compatrepositório , que também está vinculado a partir do documento PHP (e sugerido se você não tiver a própria implementação do PHP disponível).

Uma rápida diferença que eu já vi: o PHP random_int()tenta usar getrandom(2)em máquinas Linux, enquanto o compat random_int()apenas /dev/urandom.

Na dúvida, eu usaria as versões do sistema (PHP) em vez daquelas introduzidas pelo software (WP). Mas essa é apenas a minha opinião.


"Na dúvida, eu usaria as versões do sistema" Parece que você explica no início da sua resposta que não pode escolher. Ou ele já está lá (PHP> = 7) e o WP não o carrega, ou não existe, então o WP o carrega. Existe um meio termo em que você se escolhe (desativando explicitamente a função do WP, presumo)? Claro, você pode fazer as modificações que desejar. Mas vale a pena ficar fora do padrão no que parece ser uma função relativamente central?
Mast

@ Mas há sempre uma maneira. Você pode carregar esse repositório e simplesmente alterar os nomes das funções ( random_int_custom()por exemplo) para que sejam utilizáveis. O último comentário foi um pouco entende como uma: faz sentido que ele funciona desta forma (em vez utilizando as funções do sistema do que o seu próprio), e eu não recomendo ir a milhas extras para contornar este
kero

1
Você não recomenda percorrer milhas extras, ok. Isso é tudo o que eu queria saber :-)
Mast
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.