将$ _REQUEST转换为对象有什么问题吗?

时间:2011-12-02 13:48:41

标签: php arrays forms object

在PHP中,将$_REQUEST转换为对象以更轻松地管理它是错误的吗?

$request = (object) $_REQUEST;
if(isset($request->submit) && isset($request->text) && !empty($request->text))
{
   // Do stuff
}

编辑:我的意思是任何意外的副作用?

3 个答案:

答案 0 :(得分:3)

我会说这没有什么不妥,除了显然你会得到更少的时间。我会做的是通过清理函数运行$ _REQUEST数组来验证和清理变量。这样你就可以随时知道如果你使用$ _REQEUST的对象版本可以安全使用它。

<强>更新

我会说这可能是现代Web应用程序世界中的最佳实践。我的意思是看看你使用的MVC框架(Zend,CodeIgniter,CakePHP等),它们都清理$ _REQUEST,$ _GET,$ _POST,$ _SERVER等,并将它们转换为对象。

请记住,像这样的事情的开销会非常小,你甚至都不会注意到它。 PHP解析和输出页面的时间非常短,通常小于一个图像的DOM请求。

答案 1 :(得分:2)

我无法看到 错误

它只允许您作为对象访问关联数组。

答案 2 :(得分:2)

不要争论,但我不知道如何更容易管理$_REQUEST变量。您可以像这样编写相同的代码行:

if(isset($_REQUEST['submit']) && isset($_REQUEST['text']) && !empty($_REQUEST['text']))
{
   // Do stuff
}

此外,数组键可能存在一些问题,这些问题无法正确转换为对象属性名称。以$_REQUEST['var name']为例。完全合法的数组名称,但将数组转换为对象,你会对结果感到非常失望。

但是,如果您非常信任您的用户并希望花费额外的时钟周期来创建新对象,那么您可以随时强行使用它。

$request = new stdclass;
foreach($_REQUEST as $field => $value){
    $request->$field = $value;
}
相关问题