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?

Juri Rudi
fonte

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.

kero
fonte
"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