Вопрос в названии.
И что происходит, когда существуют все 3 из $_GET[foo]
, $_POST[foo]
и $_COOKIE[foo] exist?
Какой из них включен в $_REQUEST?
Я бы сказал, никогда.
Если бы я хотел, чтобы что-то было настроено с помощью различных методов, я бы закодировал для каждого из них, чтобы напомнить себе, что я сделал это так, иначе вы могли бы переписать вещи, не понимая.
Если это не так:
$ _GET = неразрушающие действия (сортировка, записи, запросы)
$ _POST = деструктивные действия (удаление, обновление)
$ _COOKIE = тривиальные настройки (предпочтения стилей и т. Д.)
$ _SESSION = нетривиальные настройки (имя пользователя, вход в систему ?, уровни доступа)
Иногда вам может понадобиться вызывать один и тот же сценарий несколькими способами. Подача формы и вызов AJAX приходит на ум. В большинстве случаев, однако, лучше быть явным.
Также см. http://docs.php.net/manual/en/ini.core.php#ini.request-order о том, как разные источники переменных переписывают друг друга, если есть столкновение имен.
Чтобы ответить на вопрос «что происходит, когда все 3 существуют», ответ «это зависит».
PHP автоматически заполняет $ _REQUEST на основе директивы request_order (или variables_order, если request_order отсутствует) в PHP.INI. По умолчанию обычно используется «GPC», что означает, что сначала загружается GET, затем загружается POST (переписывание GET, если есть столкновение), затем загружаются файлы cookie (переписывание get / post, если есть столкновение). Однако вы можете изменить эту директиву в файле PHP.INI. Например, сменив его на «CPG», сначала загрузит файлы cookie, затем опубликует, а затем получит.
Насколько использовать его? Я повторю настроение «Никогда». Вы уже не доверяете пользователю, так зачем же давать пользователю больше инструментов? Как разработчик, вы должны знать, откуда вы ожидаете получить данные. Все дело в уменьшении площади поверхности атаки.
$_REQUEST
– это всего лишь ярлык, который не позволяет вам тестировать пост, получать и готовить, если данные могут быть получены из любого из них.
Есть некоторые подводные камни:
$_REQUEST
. Тем не менее, если вы знаете, что делаете, это просто еще один удобный трюк PHP .
Я бы использовал его, если бы захотел быстро обновить var, который может поступать из нескольких источников. EG:
Чтобы проверить, активен ли сеанс, независимо от того, передается ли идентификатор сеанса.
Когда вы не уверены, где заполняются значения или когда вы используете их как и хотите, чтобы перебрать все значения с помощью методов POST и GET.
Я использую POST, когда я не хочу, чтобы люди имели легкий доступ к тому, что передается, и я использую GET, когда я не возражаю против того, чтобы они видели значение в URL-адресе. Обычно я не использую файлы cookie, поскольку я считаю, что SESSION подходит для сохраняющихся значений (хотя правильный реестр – лучший способ его использования).