嗨,我有一个关于$ this的问题。
class foo {
function __construct(){
$this->foo = 'bar';
}
}
class bar extends foo {
function __construct() {
$this->bar = $this->foo;
}
}
会
$ob = new foo();
$ob = new bar();
echo $ob->bar;
导致bar
??
我只是因为我认为它会问,但是我的剧本之间似乎没有产生我的想法。
答案 0 :(得分:10)
引用PHP manual:
注意:如果子类定义了构造函数,则不会隐式调用父构造函数。为了运行父构造函数,需要在子构造函数中调用 parent :: __ construct()。
这意味着在您的示例中bar
的构造函数运行时,它不会运行foo
的构造函数,因此$this->foo
仍未定义。
答案 1 :(得分:5)
PHP parent constructor is not automatically called if you define a child constructor有点奇怪 - 您必须自己调用它。因此,要获得您想要的行为,请执行此操作
class bar extends foo {
function __construct() {
parent::__construct();
$this->bar = $this->foo;
}
}
答案 2 :(得分:0)
您不会创建foo和bar的实例。创建一个bar实例。
$ob = new bar();
echo $ob->bar;
并且正如其他答案所指出的那样,在bar构造函数中调用parent :: __ construct()