我可以扩展sueprtype的构造函数吗?文档没有说明扩展功能。
我想创建一个在初始化子类型时连接到数据库的类,但我不想为每个子类型编写连接代码。所以我想在超类型的构造函数中执行它,但我也希望子类型具有构造函数。
答案 0 :(得分:1)
方法不会“扩展”本身;课程得到扩展。这些类的方法仍然存在,如果它们的范围适当,可以调用它们。
要更直接地回答您的问题,您可以调用parent::__construct()
来调用超类的__construct()
方法。有关详细信息,请参阅the PHP documentation on constructors and destructors。
答案 1 :(得分:1)
来自php.net
注意:如果子类,则不会隐式调用父构造函数 定义构造函数。为了运行父构造函数,调用
是子构造函数中的parent :: __ construct()
http://www.php.net/manual/en/language.oop5.decon.php
所以你要做的是连接超类构造函数中的数据库。然后创建子类构造函数并调用parent::__construct()
但是,明确连接可能会更好。在基类中调用$this->connect()
,它将在父类中定义。
答案 2 :(得分:1)
正如您可以使用parent::methodName()
来调用函数的父版本,因此您可以调用self::methodName()
来调用方法的当前类实现。
此链接可能对您有所帮助
答案 3 :(得分:1)
是的,您可以像类中的任何其他方法一样覆盖构造函数:
<?php
class DbSuper {
function __construct() {
echo "db connection using super class<br/>";
}
}
class DbSub extends DbSuper {
function __construct() {
echo "db connection using sub class<br/>";
}
}
class DbSubNoConstr extends DbSuper {
}
class DbSubBothConstr extends DbSuper {
function __construct() {
echo "execute subclass code<br/>";
parent::__construct();
}
}
new DbSub(); //prints db connection using sub class
new DbSubNoConstr(); // prints db connection using super class
new DbSubBothConstr(); // prints execute subclass code db connection using super class
?>