Php 如何在另一个类中使用一个类

Php 如何在另一个类中使用一个类,php,oop,Php,Oop,我有一个叫做用户的“主类”。基本上,它所做的就是用_construct()初始化用户名。我创建了一个单独的组,名为“组”。groups类允许我检索用户所属的“组”。例如: public function getGroups($username) { return $usersgroups; // there's much more to this, obviously. } $groups = new Groups(); $usergroups = getGroups("admin")

我有一个叫做用户的“主类”。基本上,它所做的就是用_construct()初始化用户名。我创建了一个单独的组,名为“组”。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();

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

您已经意识到我们应该能够从
user
的实例中获取用户的组,这一点很好

在最基本的层面上,您应该真正拥有
setGroup
getGroups
方法。您甚至可以包括另一个名为
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;

    }

}
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

    }

}
您会注意到我使用的方法是
setGroup
getGroups
。正如我上面所说,您可以包括另一个名为
setGroups
的方法。这有点复杂,但基本上您需要的是另一个名为
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;

    }

}
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。我给你举了几个例子来说明如何深入地使用这些对象,并且可以随意地玩和问更多的问题。

是的,你可以这样做。开始阅读OO设计。:)你为什么不试试呢?