2011-03-20 55 views
2

到目前爲止語法是沒有問題的,但我的問題是更多更好地瞭解OOP跨越到PHP OOP

我創建了一個名爲「用戶」應該描述一個用戶類。通常這樣的類將設置用戶變量並檢索它們

該類是否也有註冊新用戶的方法? 如何登錄?

如果不是..我會如何構造它?

應該「註冊」是另一類嗎?在這種情況下,不會生成的對象是一個「用戶」

同樣適用於一個登錄類...

抱歉NOVIS問題....只是想換我周圍OOP頭。

感謝您的幫助:)

回答

3

大多數PHP OOP應用程序將使用模型 - 視圖 - 控制器(MVC)方法來解決這個問題,您的用戶類是'模型'和'控制器'類,提供與用戶類交互的業務邏輯,如'註冊或登錄'。 '視圖'部分是指輸出到瀏覽器的表示代碼(混合使用PHP/HTML)。

控制器的方法將是這個樣子:

class UserController { 

    public function signup($userDetails) { 
     // create a new user 
     $user = new User(); 
     $user->name = $userDetails['name']; 
     $user->username = $userDetails['username']; 
     $user->password = $userDetails['password']; 
     $user->save(); // Save to database, for example 
    } 

    public function login($username, $password) { 
     // check the user exists and log them in 
     $user = new User(); 

     // query database for a user with these credentials, for example 
     if($id = $user->find($username, $password)) { 
      $_SESSION['user'] = $id; // Save the ID to the session for future use 
      return true; 
     } 

     return false; 
    } 

} 

這只是一個非常簡單的例子,但一般你不想與混合應用程序邏輯(動作,如登錄或註冊)您域邏輯(它應該只關心管理你的數據)。

在PHP MVC的一篇好文章可以在這裏找到:http://oreilly.com/php/archive/mvc-intro.html

+0

我是正確的假設,這些方法「拯救」與「發現」是在同一個UserController類也? – salmane 2011-03-21 00:23:34

+0

對不起,我應該說得更清楚。在上面的例子中,它們存在於用戶類中。情況並非一定如此;你可以說上面的例子是一個'Active Record'(谷歌它)的方法,其中類包含與數據庫表交互的方法。他們在User類上比在UserController上更好的原因是,你可能想在應用程序的其他地方調用它們。如果你看看在CakePHP或Symfony這樣的框架中如何處理MVC,它應該是合理的。 – Craig 2011-03-21 13:36:19

+0

謝謝Craig – salmane 2011-03-21 18:15:45

4

類不一定代表您的經驗的實體。有時它們代表一個概念:

  • 註冊用戶實際上是用戶管理的工作。考慮代表用戶管理的類。
  • 登錄是身份驗證組件的工作。考慮一個代表認證組件的類。

這些只是一些例子,他們可能不會告訴你爲什麼它經常這樣做的原因。爲此,我建議關於面向對象編程的文獻。那些文獻應該告訴你關於問題的分離,失去耦合,打開/關閉原則,針對接口編程,如何將需求轉換爲類。