我应该为扩展类编写构造函数吗?

时间:2011-10-21 23:05:42

标签: php class

父类有一个像这样的构造函数:

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()函数。除此之外,孩子的构建方式与父母相同。我应该为孩子写一个构造函数吗?

2 个答案:

答案 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
    }
}