2013-12-21 80 views
2

我有一個名爲User的「主類」。基本上它只是用__construct()初始化用戶名。我創建了一個名爲「Groups」的單獨組。 groups類將允許我檢索用戶所屬的「組」。例如:如何在另一個類中使用一個類

public function getGroups($username) { 
    return $usersgroups; // there's much more to this, obviously. 
} 

$groups = new Groups(); 
$usergroups = getGroups("admin"); 

而是可我只是用我的用戶類,並完成類似下面?:

$user = new User("admin"); 
$user->groups->getGroups(); 
+5

是的,你可以做到這一點。開始閱讀關於OO設計。 :) – Achrome

+0

你爲什麼不試試呢? – Barmar

回答

1

事實上,你已經意識到我們應該能夠從User的實例獲取用戶組。

在最基本的層面上,您應該確實有一個setGroupgetGroups方法。您甚至可以添加另一種稱爲setGroups的方法,其中添加了一個Group實例(或GroupCollection)的數組。

爲了讓你在正確的道路上,你可能想要做的事,如:

class Users { 

    protected $groups = array(); 

    public function __construct() 
    { 

     // ... 

    } 

    public function setGroup (Group $group) 
    { 

     array_push($this->groups, $group); // may require private addGroup method depending on how complex the registration is 
    } 

    public function getGroups() 
    { 

     return $this->groups; 

    } 

} 

你會發現我使用的方法setGroupgetGroups。就像我上面所說的,你可以包含另一種叫做setGroups的方法。這有點複雜,但基本上你需要的是另外一個叫做GroupCollection的課程,它基本上是一個Groups的榮耀陣列。那會是這個樣子:

class Users { 

    protected $groups; 

    public function __construct() 
    { 

     $this->groups = new GroupCollection; 

    } 

    public function setGroups (GroupCollection $groupCollection) 
    { 

     $this->groups = $groupCollection; 

    } 

    public function addGroups (GroupCollection $groupCollection) 
    { 

     $this->group->merge($groupCollection); 

    } 

    public function addGroup (Group $group) 
    { 

     $this->groups->addGroup ($group); 

    } 

    public function getGroups() 
    { 

     return $this->groups; //returns a GroupCollection 

    } 

} 

你可以得到相當詳細的用這種東西 - 這一切都取決於你想要做什麼和怎麼複雜也。以上我使用的是更高級的域對象,但如果你剛剛開始,我建議閱讀更多的OOP。我給了你幾個例子來展示你如何深入這些對象,隨時隨地玩耍並提出更多問題。

+0

這太好了,非常感謝! – user2879373

1

是的,只是初始化$groups成員變量在用戶的構造函數。你可以在課堂中的任何方法中將其引用爲$this->groups

相關問題