2011-12-02 21 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; 
} 
相關問題