2016-03-17 28 views
1

我想知道在這種情況下實際上最好的做法是什麼。你會使用以下哪些代碼片段?PHP最佳實踐 - 多次讀取GET/POST參數或創建變量

doStuff($_GET["param"]); 
doMoreStuff($_GET["param"]); 

$variable = $_GET["param"]; 

doStuff($variable); 
doMoreStuff($variable); 

有沒有哪怕只是在一個良好的PHP代碼應該怎麼看起來像在性能或者外觀有什麼區別?

如果第一個更好,你會推薦多少函數調用來使用變量?

+1

只要GET和POST變量必須在處理之前進行消毒處理,您必須對其進行消毒,然後將其分配給變量,因爲它將用於不同的地方。變量賦值實際上不會影響性能。 – Farside

回答

2

您應該過濾全局變量$_GET中的參數。因此,最佳做法是將$_GET中的過濾數據存儲在變量中,並將其用於代碼的其他部分。過濾是一種好方法,因爲它使您的代碼更安全。

在那裏,你可以閱讀,過濾輸入:如果$ _GET [「參數」]未設置http://php.net/manual/en/function.filter-input.php

+0

沒有理由不能過濾$ _GET/$ _ POST陣列發回到$ _GET/$ _ POST數組 – RiggsFolly

0

您的代碼會產生警告。

我會先驗證$_GET['param']實際存在,然後做任何你喜歡的事情。

if(!isset($_GET['param'])){ 
    //fail here with exit() or exception, or whatever 
} 

//your code here, now you know for sure that $_GET['param'] is present 
doStuff($_GET['param']); //or whatever you like 

您還應該進一步驗證你帕拉姆因此,如果它的整數檢查is_numeric(),更好地(int)後做鑄造。 empty()也是你的朋友,但請注意,如果$_GET['param']="0"empty()將返回true。

驗證完成後,您可以選擇任何一種方法,兩者都可以。最終它將取決於你所處的情況。

+0

如果沒有設置參數$ _GET ['param']給你null並且沒有警告 – PrototypeX7

+0

做任何邏輯你已經計劃好,向用戶發出警告,或者任何你想做的事情。 –

+0

@ PrototypeX7您顯然使用'display_errors = Off'運行,並且絕不會看起來像PHP錯誤日誌。在'$ _GET'數組中不存在'$ _GET ['param']'時,執行'$ var = $ _GET ['param'];會產生一個'Notice:Undefined index:param' – RiggsFolly

0

兩者實際上是相同的;

$variable = $_GET["param"]; 

如果您在不同的頁面中使用相同的變量,將會清理您的樣式,並且會更加有用。

0

實際上,$ _GET數組也是一個變量。因此,多次使用$ _GET應該不成問題。當你爲GET數據創建一個單獨的變量時,你的腳本將需要更多的內存。

當您多次執行相同的操作(例如,從用戶的輸入中過濾某些內容)時,爲此創建一個變量並且不要操作$ _GET或$ _POST數組被認爲是最佳做法。在我看來,如果你期待$ _GET數組中的直接用戶輸入,但它包含過濾/處理過的數據,則會引起混淆。

+0

而且沒有理由不能將$ _GET/$ _ POST數據清理回來。 – RiggsFolly

+0

當然,你可以做到這一點。但是,在我看來,如果您期望$ _GET數組中的直接用戶輸入,但它包含已經過濾/處理的數據,則會引起混淆。而且,如果你使用像http_build_query()這樣的函數,它們依賴$ _GET變量的內容並期望用戶輸入內部。 – FlasH

+0

但是,如果將過濾的數據保留在$ _POST/$ _ GET中,它會記錄您在使用它的每行代碼中使用的數據。 – RiggsFolly