php для сопоставления внешних переменных в один объект независимо от GET или POST

Я помню, как однажды просмотрел чужой PHP-код, и у него была функция или метод класса, который перекатил все переменные GET и POST в один простой старый объект, который затем можно было бы передать. Если одна и та же пара имен и значений появилась как в GET, так и в POST, POST победит.

Есть ли хорошо закодированные PHP-надстройки любого рода, которые делают именно это?

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

Если это вызывает проблемы, неплохо было бы свернуть простую версию, суть которой была бы чем-то вроде

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

Вы можете затем обернуть это способом, возможно, предоставляя дополнительные полезные функции, например, автоматически применяя stripslashes() к значениям, искаженным с помощью magic_quotes , предоставляя значения по умолчанию для отсутствующих переменных и т. Д.

Объединение обеих переменных (или использование $_REQUEST или Register Globals вместо этого) может вызвать недостатки безопасности, поскольку вы не можете точно определить источник своих значений. Поэтому при доступе к $_REQUEST['foobar'] вы не можете определить, было ли отправлено значение по URL-адресу, телу POST или Cookie. Это может сделать ваш сценарий уязвимым для кросс-сайта запроса Forgery .

Поэтому я рекомендую вам пойти на безопасность с комфортом и использовать эти переменные, в которых вы ожидаете, что ваши ценности иссякнут. $_GET для аргументов, которые, как ожидается, будут передаваться по URL-адресу, $_POST для тех, кто прошел через POST и $_COOKIE для файлов cookie.

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

 function param($name, $default = null) { return isset($_POST[$name]) ? $_POST[$name] : (isset($_GET[$name]) ? $_GET[$name] : $default); } 

Но на самом деле .. это плохая практика.

вы можете использовать глобальную переменную $ _REQUEST. он определяется PHP, который интерпретируется по умолчанию, когда ваше приложение работает в веб-сапи (например, CGI или веб-серверном модуле), что относится к вашему приложению при написании веб-приложений с использованием PHP. $ _REQUEST – ассоциативный массив всех данных в $ _GET и $ _POST и определяется по умолчанию. для его использования не требуется расширение / библиотекари.

Это класс из моей структуры, который обрабатывает глобальные переменные во всем приложении. Здесь не обрабатывается переменная.

 class stGlobal 

{

 //instance private static $instance; //global settings public $post = ''; public $get = ''; public $files = ''; public $request = ''; private function initialize() { $this->post = $_POST; $this->get = $_GET; $this->files = $_FILES; $this->request = $_REQUEST; } public function getInstance() { if (!isset(self::$instance)) { $class = __CLASS__; self::$instance = new $class(); self::$instance->initialize(); } return self::$instance; } 

}

Использовать его в любом месте

 $myObj = stGlobal::getInstance();