在对象中使用对象?

时间:2011-11-04 16:29:13

标签: php oop class

是否可以在对象中使用对象?例如,我有一个MySQL类,它有每个MySQL相关的方法(连接,查询,获取行...),我正在创建一个名为User的新对象,它将具有登录,注销,注册等方法。 ..是否可以包含我的MySQL类,定义一个对象,然后在我的新对象中运行查询?如果是这样,如何? 例如:

class User{
    $m = new MySQL();
    function login($username, $password, $remember = false){
                $m->rQuery("SELECT * FROM users......");
    }
}

4 个答案:

答案 0 :(得分:3)

  

是否可以在对象中使用对象?

使用__construct函数初始化您需要的任何子对象

答案 1 :(得分:2)

是的,您可以像这样使用它:

class User{
    private $db;

    function __construct()
    {
        $this->db = new MySQL();
    }

    function login($username, $password, $remember = false){
                $this->db->rQuery("SELECT * FROM users......");
    }
}

答案 2 :(得分:2)

答案与其他答案非常相似,但有一个 - 在我看来,关键 - 差异:而不是在构造函数中实例化依赖/依赖,将它们传递给 / em>构造函数:

class User
{
    protected $db;

    public function __construct(Db $db)
    {
        $this->db = $db;
    }

    public function login($username, $password)
    {
        $this->db->query("SELECT * FROM users...");
    }
}

此类dependency injection的好处包括:

  1. 它清楚地表明客户端/消费者类(User)具有依赖关系(Db)。
  2. 减少User类和Db类之间的耦合。这在Userunit-testing时非常有用。您可以创建一个按预期执行的模拟Db。然后,任何测试失败都可归因于User类。
  3. 当然,为了实例化User对象,您需要首先实例化Db对象。对于单个对象或长链依赖关系有很多依赖关系,这可能是一种痛苦。在这种情况下,使用工厂或依赖注入容器来帮助创建此对象是有用的 - 但不是必需的。

答案 3 :(得分:0)

Ofcource,你可以,但不是那样。你能做的就是这样:

class User
{
    private $m = null;

    function __construct()
    {
        $this->m = new MySQL();
    }

    function login($username, $password, $rememer = false)
    {
        $this->m->rQuery("SELECT * FROM users......");
    }
}