我记得曾经回顾过别人的 PHP 代码,他有一个函数或类方法,可以将所有 GET 和 POST 变量滚动到一个可以传递的普通旧对象中。如果 GET 和 POST 中出现相同的名称-值对,则 POST 将获胜。
是否有任何类型的编码良好的 PHP 插件可以做到这一点?
我记得曾经回顾过别人的 PHP 代码,他有一个函数或类方法,可以将所有 GET 和 POST 变量滚动到一个可以传递的普通旧对象中。如果 GET 和 POST 中出现相同的名称-值对,则 POST 将获胜。
是否有任何类型的编码良好的 PHP 插件可以做到这一点?
您可以使用$_REQUEST
,但请注意它包含 、 和 的内容$_GET
,$_POST
并且$_COOKIE
此超全局变量中变量的存在(和顺序,用于覆盖目的)取决于执行环境中的配置。
如果这会导致问题,那么汇总一个简单版本可能是个好主意,其关键是类似于
$requestData = array_merge( $_GET, $_POST );
然后,您可以以某种方式将其包装起来,也许提供额外的有用功能,例如自动应用stripslashes()
到使用修饰的magic_quotes
值,为缺失变量提供默认值等。
我认为将其$_GET
与$_POST
. 它们用于完全不同的事物,并且将它们视为平等,您实际上是在滥用 HTTP 协议。如前所述,$_REQUEST
做你想做的事,但有点不可预测。您可以轻松编写自己的全局函数来做同样的事情:
function param($name, $default = null) {
return isset($_POST[$name])
? $_POST[$name]
: (isset($_GET[$name])
? $_GET[$name]
: $default);
}
但真的..这是不好的做法。
您可以使用 $_REQUEST 全局变量。它由默认解释的 PHP 定义,当您的应用程序在 web sapi(如 CGI 或 web 服务器模块)中运行时,当您使用 PHP 编写基于 Web 的应用程序时,您的应用程序就是这种情况。$_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();