是否可以在对象中使用对象?例如,我有一个MySQL类,它有每个MySQL相关的方法(连接,查询,获取行...),我正在创建一个名为User的新对象,它将具有登录,注销,注册等方法。 ..是否可以包含我的MySQL类,定义一个对象,然后在我的新对象中运行查询?如果是这样,如何? 例如:
class User{
$m = new MySQL();
function login($username, $password, $remember = false){
$m->rQuery("SELECT * FROM users......");
}
}
答案 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的好处包括:
User
)具有依赖关系(Db
)。User
类和Db
类之间的耦合。这在User
类unit-testing时非常有用。您可以创建一个按预期执行的模拟Db
。然后,任何测试失败都可归因于User
类。当然,为了实例化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......");
}
}