php 类扩展
您好,我有一个关于 $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
??
我只是因为我认为会这样而问,但我的脚本的一部分似乎并没有达到我的想法。
Hi I have a question regarding $this.
class foo {
function __construct(){
$this->foo = 'bar';
}
}
class bar extends foo {
function __construct() {
$this->bar = $this->foo;
}
}
would
$ob = new foo();
$ob = new bar();
echo $ob->bar;
result in bar
??
I only ask due to I thought it would but apart of my script does not seem to result in what i thought.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
引用 PHP 手册 :
这意味着在您的示例中,当
bar
的构造函数运行时,它不会运行foo
的构造函数,因此$this->foo
仍未定义。To quote the PHP manual:
This means that in your example when the constructor of
bar
runs, it doesn't run the constructor offoo
, so$this->foo
is still undefined.PHP 有点奇怪,如果您定义了子级,则不会自动调用 父级构造函数构造函数 - 您必须自己调用它。因此,为了获得您想要的行为,请执行以下操作
PHP is a little odd in that a parent constructor is not automatically called if you define a child constructor - you must call it yourself. Thus, to get the behaviour you intend, do this
您不会同时创建 foo 和 bar 的实例。创建 bar 的单个实例。
正如其他答案所指出的,在 bar 构造函数中调用parent::__construct()
You don't create an instance of both foo and bar. Create a single instance of bar.
and as other answers have pointed out, call parent::__construct() within your bar constructor