父类有一个像这样的构造函数:
function CD_Log( $id = false ) {
$this->__construct( $id );
}
function __construct( $id = false ) {
global $cd;
if ( !empty( $id ) ) {
$this->id = $id;
$this->populate();
}
}
在扩展类中,我想将一些父类的var和child的var保存到不同的地方,也不会使用populate()函数。除此之外,孩子的构建方式与父母相同。我应该为孩子写一个构造函数吗?
答案 0 :(得分:1)
如果需要 - 您可以覆盖子类中的构造函数。但请记住,在这种情况下,父构造函数不会自动调用,您需要手动执行parent::_construct()
答案 1 :(得分:1)
如果你现在跟踪OOP,你应该删除$ cd的全局调用,将其设置为父或子的成员var。
正如我所见,它们常用的构造函数通常在实例化对象时调用,而不是通过同一类的另一个方法调用,就像CD_Log正在执行的方法一样。
例如:
$myCdObject = new MyCdClass(); // Automatically calls constructor
$myCdObject->Cd_Log($string);
通过上面的示例,您可以确保CD_Log方法仅处理log
逻辑。除非你使CD_Log成为一个静态函数,否则你可以在:
public static function CD_Log($id)
{
$myCdObject = MyCdClass(); // Automatically calls constructor
// Continue with `log` logic
}
要回答您的问题,您可能需要子类中的构造函数,它将显式调用父构造函数:
class parent
{
public function __construct($id)
{
$this->id = $id;
}
}
class child extends parent
{
public function __construct($id)
{
// Going to take advantage of shared logic
parent::__construct($id);
// Now lets do some child class specific stuff
}
}