如果我有两个类扩展第三类,那么在实例化第一类和第二类时,第三类的内容会被实例化两次吗?
示例:
class class1 extends class3{}
class class2 extends class3{}
class 3{
$this->db = new mysql();
}
$class1 = new class1();
$class2 = new class2();
在上面的例子中,db对象会被创建两次吗? ,在这种情况下,导致与mysql的2个连接?
谢谢,
答案 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()创建了一个连接,是