1

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

如何通过其父类从扩展类访问函数?

基类(父类)

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”函数?

谢谢!

4

2 回答 2

1

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

例如

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的构造函数中执行相同的代码。

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

于 2013-03-10T13:27:50.697 回答
0

您阅读了有关如何访问父类函数的信息,它与parent关键字一起使用,如下所示:

parent::__construct();

对于$second您可以访问的属性,$this因为它是公开的:

$this->second;

这已经是全部了。请注意调用父级的构造函数并记住公共成员是公共的(并且您将永远无法访问私有成员)。

于 2013-03-10T13:42:31.513 回答