有关扩展类的PHP继承问题

时间:2011-09-18 23:46:21

标签: php class inheritance extend

如果我有两个类扩展第三类,那么在实例化第一类和第二类时,第三类的内容会被实例化两次吗?

示例:

class class1 extends class3{}

class class2 extends class3{}

class 3{
    $this->db = new mysql();
}

$class1 = new class1();

$class2 = new class2();

在上面的例子中,db对象会被创建两次吗? ,在这种情况下,导致与mysql的2个连接?

谢谢,

3 个答案:

答案 0 :(得分:2)

您的示例有几个基本的语法错误,但是,是的,派生类包含基类作为子类,因此任何派生类的每个实例都将包含基类的所有成员。

如果基类打开了与数据库的连接(但这需要你编写一些非平凡的代码,比如构造函数),那么这将在任何派生实例中发生:

class Base
{
  private $db;  // maybe "protected"...
  public function __construct() { $db = new mysqli; /* + connect! */ }
}

class Der1 extends Base
{
  public function __construct() { parent::__construct(); }
}

// etc.

答案 1 :(得分:1)

第一,

class 3{
     $this->db = new mysql();
} 
由于存在语法错误,

将无法运行。你不能在一个类中拥有代码,除非它在一个方法中。我假设你的意思是对象创建行在类构造方法__construct()中。在这种情况下,每次实例化任何类时都会运行代码。这是除非您在其中一个所谓的类中覆盖了该方法。

答案 2 :(得分:0)

如果新的mysql()创建了一个连接,是