2012-07-12 130 views
2

這是我從未完全確定或從未找到確切答案的內容。PHP,將參數傳遞給對象方法或使用實例變量

可以說我有一個用戶類,裏面有一個register()方法,我不確定哪種方式最好實現這個方法。

在我register.php頁我應該有

$user->register($_POST['firstName'], $_POST['lastName'], $_POST['username'], etc..); 

,然後在register()方法不打擾設置對象的屬性,只是使用的方法或簽名提供的變量應該我做

$user->register(); 

然後在寄存器功能做一些像

$this->firstName = $_POST['firstName']; 
$this->lastName = $_POST['lastName']; 
etc... 

提前致謝。

回答

0

考慮到$_POST是在全局範圍內定義的,使用後一種方法(不傳入參數並從函數中設置它)會更有意義。但是請注意,這僅適用於在全局範圍(在這種情況下)中聲明$_POST的情況,並且在從外部PHP模塊傳入該類時,您將失去靈活性。

+0

好涼爽感謝回覆。我一直在使用最後一種方法,所以看起來像我不必更改任何代碼。 – David 2012-07-12 18:07:20

2

如果註冊方法綁定到對象(實例,而不是類),我會讓它使用必須事先設置的內部屬性。所以,你實例化一個用戶,設置屬性,然後調用$ user-> register()。

$user = new User(); 
$user->firstName = 'name'; //$user->setFirstName('name') could also work 
$user->lastName = 'last name'; // for this to work, the properties have to be public 
$user->register(); 

用戶A應該只能註冊本身,而不是別的。

如果你使用帶參數的方法,你基本上可以註冊任何東西(不僅僅是一個用戶)。另外,如果註冊意味着將參數寫入數據庫,則只使用用戶對象內部的方法更加健壯。如果您決定更改註冊機制(如果您需要來自用戶對象的其他信息),則只需修改用戶類。

編輯:

現在,我已經想過這個問題有點多,我想我會再拍類註冊用戶,則需將整個用戶對象,並添加一個角色或任何與保存到數據庫。這樣,用戶對象更簡單一些,不需要知道它是如何註冊或註銷的,如果註冊機制改變,用戶可以保持不變。

編輯2:

從不是一個真正的二傳手的方法設置對象屬性時要小心(就像您在寄存器($ FNAME,LNAME $ ......))。同樣的方法給我帶來了麻煩,因爲「某些東西」會因爲沒有明顯原因而改變我的對象,並且我無法在代碼中的任何地方找到setter或直接調用屬性。

+0

當你說實例化用戶時,設置屬性,然後調用$ user-> register()函數,你用什麼方法設置屬性?在運行register()方法之前,爲每個屬性使用setter方法? – David 2012-07-12 18:15:57

+0

您不必使用setter,您可以直接訪問該屬性(如果它是公開的)。儘管一個setter可以給你一種驗證輸入的方法,但如果姓氏是空的或類似的東西,你可以拋出一個異常。 我在帖子中添加了代碼,因爲在評論中做到這一點非常棘手。 – Pinetree 2012-07-12 18:17:17

1

實施完全取決於您。你可以做任何一種方式。這裏有一個例子:

class User{ 

    protected $_firstName = null; 

    protected $_lastName = null; 


    public function register(array $params = array()){ 
     if(!empty($params)){ 
      $this->setParams($params); 
     } 
     // Do more processing here... 
    } 


    public function setParams($params){ 
     // Set each of the users attributes. 
    } 


    public function setFirstName($name = null){ 
     if($name !== null){ 
      $this->_firstName = $name; 
      return true; 
     } 
     return false; 
    } 


    public function getFirstName(){ 
     return $this->_firstName; 
    } 


    // Same getter and setter methods for other attributes... 

} 

這樣你就可以在用戶屬性爲$_POST,或者您可以通過調用$user->setFirstName()$user->setLastName()等分別做傳遞一個數組...用於快速