2011-12-01 152 views
0

对不起,对于措辞严重的标题。我不太了解面向对象的PHP,因此,我无法想出一个更好的标题(或解决我的问题!)。当第一个实例化而不使用构造函数时,是否有可能实例化第二个类?

好了,所以,我有这样的事情:

Class foo{ 
    var $hello; 
    function foo(){ 
    } 
} 

Class customfoo extends foo{ 
    //No Constructor 
} 

现在,我写了另一个类,姑且称之为customclass,我想在customfoo类使用它。但是,我不只是想在customfoo类中使用它,我希望在创建customfoo类后立即创建它。

通常情况下,我相信,你只需要使用这个构造函数,所以像:

Class customfoo extends foo{ 
    var $custom; 
    function customfoo(){ 
     $this->custom = new customclass(); 
    } 
} 

然而,customfoo是一个子类,所以,我认为,构造函数替换父的构造上课,我不希望这种情况发生。那么,当customfoo第一次启动时,我该如何创建一个类customclass?我猜,我可以只写一个任意函数并通过其他函数调用它(我确信它会在早期执行),但至少知道如何执行上述操作会很好。

+0

在PHP类的构造函数是'__construct ()'。使用与类的名称相同的函数作为构造函数将被折旧并且仅用于向后兼容性。你不应该再使用它。 – vascowhite

+0

@vascowhite是的,我不打算。我正在编写的代码已经是这样写的,所以我下意识地复制了它。 – zermy

+0

http://www.php.net/manual/en/keyword.parent.php这可能会有所帮助 – suenda

回答

3

首先,您应该将您的counstructors命名为__construct

正如你所指出的那样,你写的构造函数将覆盖父母的一个,但你总是可以从子类调用它,就像这样:

Class customfoo extends foo{ 
    var $custom; 
    function __construct(){ 
     parent::__construct(); 
     $this->custom = new customclass(); 
    } 
} 
+0

糟糕,是的,你说的是'_construct'。代码已经写好了,所以我就这样离开了。 至于你的解决方案,呵呵,这很有趣。那么,嗯,父母是一个关键词,还是我把父母的名字放在那里? – zermy

+0

不,父母是一个保留关键字。你可以找到更多关于PHP手册的信息:http://www.php.net/__construct – rabusmar

+0

@zermy它看起来像你应该阅读这个http://us2.php.net/oop或一本好书/网站OOP与PHP。那里有很多很好的教程。 – vascowhite

相关问题