将$_REQUEST转换为object是否有问题?


Is there something wrong with casting $_REQUEST to object?

在PHP是错误的铸成$_REQUEST对象更容易管理?

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

EDIT:我是说有任何意想不到的副作用吗?

我想说这没有什么错,除了很明显你会得到一点额外的时间。我要做的是通过一个cleaner函数运行$_REQUEST数组来验证和清理变量。这样你就可以知道,如果你使用$ _request的对象版本,它是安全的。

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

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

我看不出有什么不对

它只允许你访问作为对象的关联数组

不是争论,但我不明白这如何使管理$_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;
}