Я помню, как однажды просмотрел чужой 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();