2015-12-23 20 views
3

我正在測試可以從命令行或通過HTTP作爲GET或POST請求調用的腳本上的給定post請求字段。因此,$_POST可以是未定義的。有沒有簡單的方法來重寫這個陳述?最新的前置條件測試?

if (isset($_POST) && isset($_POST['function']) && $_POST['function'] == "login"): 

我可以抑制錯誤@ - 操作員 - 是不好的做法?

if (@$_POST['function'] == "login"): 

我可以使用PHP 7.0的空COALESCE操作,但是引入無用的文字純粹旨在拋出false

if (($_POST['function'] ?? null) == "login"): 
+1

可能不太受歡迎的意見,但我認爲這是一種情況是使用錯誤抑制是合理的。該指數不存在時的影響是顯而易見的。 –

+0

這個問題的變化現在被問到。我總是建議停止關心,編寫一個自定義的包裝函數,並使用'if(get_input('function')=='login')'。 –

+0

@DanielSloof不需要僅僅使用'php_sapi_name()' – RiggsFolly

回答

2

如果有幫助,你不需要兩個isset()測試:

if (isset($_POST['function']) && $_POST['function'] == "login"): 

如果未設置$_POST,將會正常工作。例如:

php > var_dump(isset($notset[123][456])); 
bool(false) 
php > 

我也會考慮你的null-coalesce操作符的用法是正確和乾淨的。

if (($_POST['function'] ?? null) == "login"): 

這對我來說很好。

你也可以抽象這個邏輯走後面的一些類型的包裝功能:

function getFunction() 
{ 
    return ($_POST['function'] ?? null); 
} 

或者說,對老年人PHP:

function getFunction() 
{ 
    return isset($_POST['function']) ? $_POST['function'] : null); 
}