我一直在网上寻找答案,但找不到任何相关内容,所以我想在这里问一下。
如何通过它的父类从扩展类中获取函数?
基础(父类)
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”功能?
谢谢!
答案 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;
这已经是全部了。小心你打电话给父母的建设者,并记住公共成员是公开的(你永远无法联系到私人成员)。