2011-12-02 45 views
1

在PHP中将$_REQUEST投射到更易于管理的对象上是错误的吗?

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

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

+3

除了意想不到的副作用? –

+1

并弃用警告。 –

+0

这样做会给您带来什么好处? –

回答

3

我会说这没有什么错,除了明显的小增加时间,你会得到。我要做的是通过清理函数运行$ _REQUEST数组来验证和清理变量。通过这种方式,您可以始终知道,如果使用$ _REQEUST的对象版本,则可以安全地使用该版本。

更新

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

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

+0

验证和清理是什么意思? – gremo

+0

检查无效字符,可能的SQL注入攻击以及可能对应用程序有害的任何其他数据。记住通过$ _REQUEST收到的任何东西都不应该被信任。 –

+1

确保您的用户没有输入'''。 –

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; 
}