如何在另一个类中使用类

时间:2013-12-21 00:53:33

标签: php oop

我有一个名为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();

2 个答案:

答案 0 :(得分:1)

是的,只需在User的构造函数中初始化$groups成员变量。您可以在类中的任何方法中将其引用为$this->groups

答案 1 :(得分: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。我举了几个例子来展示你如何深入了解这些物品,并随意玩耍并提出更多问题。