2009-08-30 67 views
7

我對代碼非常驚訝,其中的GET值(如$_GET['username'])不包含在函數的參數中。

你什麼時候需要將POST和GET方法作爲函數的參數?

+2

你真正的問題是什麼?最後一個問號(雖然有缺陷)帶有問號並沒有任何意義。 $ _GET和$ _POST是全球性的,它們可以在任何地方使用。它是不錯的編碼練習,也許可能不是。 – 2009-08-30 19:25:44

回答

24

你什麼時候你需要包括POST 和GET方法作爲參數傳遞給 的功能呢?

我會說:「從來沒有」:$_GET$_POST是所謂superglobals:他們在整個腳本存在;這意味着它們存在於函數/方法中。

特別是,你不需要你爲那些關鍵字global。儘管如此,依賴於你的函數/方法中的那些是一個相當糟糕的做法:你的函數/方法通常不應該依賴於任何未作爲參數傳遞的東西。

我的意思是;考慮這兩個功能:

function check_login_password() 
{ 
    $login = $_GET['login']; 
    $password = $_GET['password']; 
    // Work with $login and $password 
} 

/** 
* Check login and password 
* 
* @param $login string 
* @param $password string 
* @return boolean 
*/ 
function check_login_password($login, $password) 
{ 
    // Work with $login and $password 
} 

OK,與第一位的,你不必傳遞兩個參數......但是,這個功能將不獨立的,不會工作在任何情況下,您都必須檢查一些不是$_GET的登錄名/密碼。

第二個函數調用者負責傳遞正確的參數;這意味着他們可以來自任何你想要的地方:這個功能總是能夠完成它的工作。

1

$ _GET和$ _POST是全局變量。他們有價值而不是方法。 這是他們想要發送給函數的值,類/函數通常應該不知道它們之外的任何東西,比如數據的來源。許多人使用在函數中使用全局變量的捷徑,從而限制了其功能的可用性。

0

您不需要將它們作爲函數參數發送,因爲它們是全局變量(可在代碼中的每個位置訪問)。

但是,在代碼中使用它們之前,過濾和驗證它們總是一個好習慣。