2011-10-21 59 views
0

父类有这样一个构造函数:我应该为扩展类编写构造函数吗?

function CD_Log($id = false) { 
    $this->__construct($id); 
} 

function __construct($id = false) { 
    global $cd; 

    if (!empty($id)) { 
     $this->id = $id; 
     $this->populate(); 
    } 
} 

在扩展级,我想有些父母var和孩子的VAR保存到不同的地方,也不会使用填充()函数。除此之外,孩子的构建方式与父母相同。我应该为孩子写一个构造函数吗?

回答

1

如果您现在正在跟随OOP,则应删除$ cd的全局调用,将其设置为父母或子女的成员变种。

正如我所看到的那样,构造函数通常在您实例化对象时调用,而不是通过同一类的另一种方法(如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 
    } 
} 
+0

谢谢!顺便说一句,如果孩子不需要父母的功能,我应该使用extrends方法吗?当父母做事情时,只需要父母的孩子去做其他工作? – Jenny

+0

如果这些类将共享任何属性,无论它是成员变量还是方法,最好进行扩展。 –

+0

谢谢!这很清楚! – Jenny

1

如果您需要 - 您可以重写子类中的构造函数。但请记住,在这种情况下,父构造函数将不会自动调用,并且您需要手动执行此操作parent::_construct()

+0

@zerkmas,谢谢!所以,我会为孩子写一个构造函数。孩子的目的是在父母被调用时使用父母的var来执行其他工作。它会有自己的ID,所以,我应该给孩子的ID另一个名字,对吧? – Jenny

+0

@珍妮:由于缺乏你在那里做什么的信息,我无法回答你的问题。 – zerkms

相关问题