php通过父类从扩展类到达函数

时间:2013-03-10 13:25:09

标签: php

我一直在网上寻找答案,但找不到任何相关内容,所以我想在这里问一下。

如何通过它的父类从扩展类中获取函数?

基础(父类)

require_once('FirstChild.class.php');

require_once('SecondChild.class.php');

class Base {

public $first;

public $second;


function __construct() {

$this->first = new FirstChild();

$this->second = new SecondChild();

}

}

第一(儿童班)

class FirstChild extends Base {

public $firstVar;


function __construct() {

$this->firstVar = 'Hello';

}


public function getSecondVar() {

echo parent::$second->getVar();//doesnt work!!?

}

}

第二(儿童班)

class SecondChild extends Base {

public $secondVar;


function __construct() {

$this->secondVar = 'World';

}


public function getVar() {

return $this->secondVar;

}

}

如何在“FirstChild”内达到“getSecondVar”功能?

谢谢!

2 个答案:

答案 0 :(得分:1)

请勿使用parent::方法。而是使用$this->second->getVar();并确保也调用父构造函数,例如使用parent::__construct();(或者,在FirstChild构造函数中填充$ this->秒)

E.g。

class FirstChild extends Base {
    public function __construct() {
        // your code
        $this->second = new SecondChild();
        $this->firstVar = 'Hello';
    }
    public function getSecondVar() {
        echo $this->second->getVar();
    }
}

编辑: 此外,您设置它的方式,$second永远不会被设置为通过将构造函数方法添加到FirstChild,您将覆盖Base::__construct()。您需要回忆parent::__construct()并确保它不会创建FirstChild()的新实例,或者您需要在FirstChild的构造函数中执行相同的代码。

无论如何,从父类调用子类通常不是最佳做法。

答案 1 :(得分:0)

您已阅读有关如何联系父母类功能的内容,并且可以使用parent keyword,例如:

parent::__construct();

对于属性$second,您可以使用$this进行公开访问:

$this->second;

这已经是全部了。小心你打电话给父母的建设者,并记住公共成员是公开的(你永远无法联系到私人成员)。