在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;
}
除了意想不到的副作用? –
並棄用警告。 –
這樣做會給您帶來什麼好處? –