В чем разница между WordPress random_int () и PHP встроенной функцией random_int ()?


10

В чем разница между определенной функцией WordPress random_int()и встроенной функцией PHP random_int()?

Кроме того, если есть разница, как интерпретатор PHP понимает, какую из двух функций я вызываю?

Ответы:


17

WordPress старый. На самом деле, он старше, чем PHP7, в котором представлен PHP random_int(). WP хотел / нуждался в этой функциональности раньше, поэтому был реализован другой метод.

как интерпретатор PHP понимает, какую из двух функций я вызываю?

Хороший вопрос. Переводчик не понимает этого. И, следовательно, если бы у вас был PHP7 и вы бы определили эту функцию как новую, вы получите ошибку. Вот почему. файл с определением функции загружается только тогда, когда random_int()по умолчанию он недоступен.

wp-includes / random_compat / random.php строки 212-214 являются

if (!function_exists('random_int')) {
    require_once $RandomCompatDIR.'/random_int.php';
}
  • Так что, если ваш сервер PHP7, а собственный PHP может быть вызван random_int(), этот сервер используется, и файл никогда не включается.

  • Если ваш сервер не является PHP7 или собственный PHP не может быть вызван random_int()по каким-либо причинам, файл включается и будет предоставлена ​​другая реализация.

Это сделано, поэтому WordPress может работать на разных системах. Те с PHP5 и те, с PHP7.

Чем он отличается? Я не могу говорить с этим. Файлы WP используются из этого random_compatрепозитория , который также связан с документом PHP (и рекомендуется, если у вас нет собственной реализации PHP).

Одно быстрое отличие, которое я уже видел: PHP random_int()пытается использовать getrandom(2)на машинах Linux, в то время как compat random_int()использует только /dev/urandom.

В случае сомнений я бы использовал версии системы (PHP) вместо версий программного обеспечения (WP). Но это только мое мнение.


«В случае сомнений я бы использовал версии системы». Похоже, вы объясняете в начале своего ответа, что вы не можете выбрать. Либо он уже там (PHP> = 7) и WP его не загрузит, либо его там нет, поэтому WP его загрузит. Есть ли середина, где вы выбираете себя (я полагаю, отключив функцию WP явно)? Конечно, вы можете внести любые изменения, которые вы хотите. Но стоит ли идти нестандартно в том, что кажется относительно основной функцией?
Мачта

@ Мачта всегда есть способ. Вы можете загрузить этот репозиторий и просто изменить имена функций ( random_int_custom()например), чтобы он был пригоден для использования. Последний комментарий был скорее задуман как: имеет смысл, что он работает таким образом (скорее используя системные функции, чем ваши собственные), и я бы не рекомендовал использовать дополнительные мили, чтобы обойти это
kero

1
Вы не рекомендуете идти лишние мили, хорошо. Это все, что я хотел знать :-)
Mast
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.