在PHP中将$_REQUEST
投射到更易于管理的对象上是错误的吗?
$request = (object) $_REQUEST;
if(isset($request->submit) && isset($request->text) && !empty($request->text))
{
// Do stuff
}
编辑:我的意思是任何意外的副作用?
在PHP中将$_REQUEST
投射到更易于管理的对象上是错误的吗?
$request = (object) $_REQUEST;
if(isset($request->submit) && isset($request->text) && !empty($request->text))
{
// Do stuff
}
编辑:我的意思是任何意外的副作用?
我会说这没有什么错,除了明显的小增加时间,你会得到。我要做的是通过清理函数运行$ _REQUEST数组来验证和清理变量。通过这种方式,您可以始终知道,如果使用$ _REQEUST的对象版本,则可以安全地使用该版本。
更新
我会去尽量的话说,这可能是在现代Web应用程序的全球最佳实践。我的意思是看你使用的MVC框架(Zend,CodeIgniter,CakePHP等),它们都清理$ _REQUEST,$ _GET,$ _POST,$ _SERVER等并将它们转换为对象。
请记住,像这样的开销会很小,你甚至不会注意到它。 PHP解析并输出页面的时间非常短,通常小于一个图像的DOM请求。
验证和清理是什么意思? – gremo
检查无效字符,可能的SQL注入攻击以及可能对应用程序有害的任何其他数据。记住通过$ _REQUEST收到的任何东西都不应该被信任。 –
确保您的用户没有输入'''。 –
没什么我可以看到的是错了与此。
它只是允许你作为一个对象访问关联数组。
不是争论点,但我不明白这是如何更容易地管理$_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;
}
除了意想不到的副作用? –
并弃用警告。 –
这样做会给您带来什么好处? –