OOP初学者:classB扩展了classA。 classA已经是对象。 classB中的方法需要..等等

时间:2010-03-17 12:55:28

标签: php oop

我正在学习自己从基于函数的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

4 个答案:

答案 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类都可以挂钩。而它的那种责任只能建立一个单一的连接。 你可以看看这个

的单身模式