我正在学习自己从基于函数的PHP编码转向OOP。这就是情况:
ClassA
拥有许多基本工具方法(函数)。它是__construct
进行数据库连接。
ClassB
包含基于特定活动的特定方法(提取小部件)。 ClassB
扩展了ClassA
因为它使用了一些基本工具,例如数据库调用。
在php文件中,我创建了一个$a_class = new ClassA
对象(因此是一个新的数据库连接)。
现在我需要ClassB
中的方法。我做$b_class = new ClassB;
并调用一个方法,该方法使用parent::
ClassA
中的方法。
在这个例子中,我有ClassA
''使用'两次。一旦成为对象,并通过parent::
调用,那么ClassA
创建另一个数据库连接(或不?)。
那么这个基本类父,子(扩展)情况的最佳设置是什么?我当然只想做一个连接?
我不喜欢将对象转发给ClassB,就像这个$ b_class = new ClassB($ a_object);或者这是最好的方式?
感谢您与我一起思考,并帮助:d
答案 0 :(得分:1)
看起来你根本不需要A类的实例。在使用这样的继承之前,确保B类确实是is
A类。如果你不确定,请查看作文。
答案 1 :(得分:1)
从我在你的描述中收集到的,听起来B级不应该真正继承自A级。问问自己 - B真的是A的“增强版”吗?如果没有,并且B只是使用A中的一些实用程序,它应该只调用它上面的方法,或者可能组成它(包含它作为成员变量。)
顺便说一句,我不认为你应该在A的构造函数中连接到数据库,除非你在它周围设置某种保护以防止重复连接。可能更好的是具有Connect()和Disconnect()函数,以便在您和未连接时能够很好地理解它。
答案 2 :(得分:1)
$class_a = new ClassA();
$class_b = new ClassB($class_a);
class ClassB {
private $class_a;
public function __construct(ClassA $class_a) {
$this->class_a = $class_a;
}
}
如果我确实理解了你想做什么。这样,您可以在ClassB的每个方法中使用ClassA方法,而无需复制与数据库的连接。
答案 3 :(得分:0)
你可以拥有另一个持有Db连接的对象,A类和B类都可以挂钩。而它的那种责任只能建立一个单一的连接。 你可以看看这个
的单身模式