我理解OOP中的继承的基本原则,但我有一个特定的事情,我想做的事情,并想知道如何做到最好。
假设我有一个核心课程:
class Core {
....
}
我还有两个或更多其他扩展此功能的类
class MyClass1 extends Core {
....
}
class MyClass2 extends Core {
....
}
我还有一个数据库类,我在其中执行查询,我想将数据库类的实例化对象(可能通过引用)传递给我的每个类。其中一个原因是存储页面执行的查询列表或计数。
我该怎么做?
答案 0 :(得分:3)
您可以将数据库对象的实例传递给类的构造函数:
class Core
protected $db;
public function __construct(Your_Db_Class $database) {
$this->db = $database;
}
}
然后,从您的方法开始,使用$this->db
来访问您的数据库。
当然,在实现类的实现时,您必须指定数据库对象:
// somewhere, instanciate your DB class
$db = new Your_Db_Class();
// And, then, when instanciating your objects :
$obj = new MyClass1($db);
另一种方法是使用Singleton design pattern,因此只能有一个数据库类实例。
可能更容易设置;但之后不太容易进行单元测试。
答案 1 :(得分:0)
您可以将数据库对象作为参数传递给类的__construct函数,然后在所述函数中将db对象分配给类的成员,例如$ this-> database_handler。
另一种可能性是使用作为数据库对象的全局变量,但全局变量由于多种原因是邪恶的,所以让我们忽略它。
另一个注意事项:默认情况下,所有对象都通过引用传递,因此您无需担心。