Зачем вам объединять $ _GET и $ _POST в PHP? - PullRequest
9 голосов
/ 14 сентября 2009

Я только что видел этот код при изучении исходного кода WordPress (PHP). Вы можете видеть, как они объединяют / превращают все значения get и post в массив из 1 запроса.

Теперь, насколько я знаю, $ _GET и $ _POST уже доступны, вызывая $ _REQUEST БЕЗ с использованием функции array_merge (), так что есть идеи, почему они это сделали?

$_REQUEST = array_merge($_GET, $_POST);

Ответы [ 4 ]

18 голосов
/ 14 сентября 2009

Это потому, что по умолчанию $_REQUEST является слиянием $_GET, $_POST И $_COOKIE. Кроме того, порядок, в котором переменные этих суперглобалов объединяются в $_REQUEST, зависит от значения ini variables_order, а на PHP 5.3.0 также может влиять request_order. Поэтому я предполагаю, что разработчик хотел убедиться, что $_REQUEST состоит только из $_GET и $_POST, слитых в этом конкретном порядке, если он не имел доступа к настройкам ini (например, на общем хосте) , Видите ли, variables_order и request_order не настраиваются для каждого сценария.

НТН

6 голосов
/ 14 сентября 2009

$_REQUEST содержит содержимое массивов $_GET, $_POST и $_COOKIE по умолчанию. Возможно, они хотят исключить из него переменные COOKIE, поскольку они обычно не используются для этой цели.

3 голосов
/ 14 сентября 2009

Это так, если у вас есть переменная GET и переменная POST с тем же именем, она выберет переменную POST вместо переменной GET.

Также вам может не потребоваться использование файлов cookie в переменной $ _REQUEST.

1 голос
/ 14 сентября 2009

Я не знаю точно, почему это было сделано там, где вы видели это, но я видел, что это делалось раньше, когда была выполнена некоторая обработка значений в одном или другом массиве, и вы хотите объединить эти изменения обратно в $ _REQUEST. так что любой, кто использует $ _REQUEST, получит изменения, даже если они были внесены в переменные $ _POST или $ _GET.

Это происходит в ситуациях, подобных Wordpress, поскольку разработчики плагинов могли использовать любую из этих переменных для доступа к данным, а ядро ​​Wordpress должно было бы убедиться, что все они получают одинаковые данные.

Почему бы вам не сделать это напрямую с $ _REQUEST? Потому что $ _REQUEST содержит массу дополнительной информации, которой нет в $ _POST и $ _GET. Возможно, вы не захотите применять свою обработку ко всем этим дополнительным битам.

...