我是否发现了 PHP 中的错误或者我错过了什么?
可能的重复:
为什么是即使类和构造函数的情况不同,我的构造函数仍然被调用?
<?php
abstract class foo {
function foof() {
echo "Hello, I'm foo :)";
}
}
class foo2 extends foo {
function foo2f() {
$this->foof();
}
}
class foo3 extends foo2 {
function foo3f() {
$this->foo2f();
}
}
$x = new foo3;
$x->foo3f();
?>
此代码输出“Hello, I'm foo :)”(如预期),但是当我将代码更改为如下所示时: http://pastebin.com/wNeyikpq
<?php
abstract class foo {
function fooing() {
echo "Hello, I'm foo :)";
}
}
class foo2 extends foo {
function foo2() {
$this->fooing();
}
}
class foo3 extends foo2 {
function foo3() {
$this->foo2();
}
}
$x = new foo3;
$x->foo3();
?>
PHP 打印:
你好,我是 foo :)你好,我是 foo :)
为什么?这是一个错误吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为您调用了 foo2 两次,所以
foo2
中的function foo2()
它是一个构造函数。Because you are calling the foo2 two times,
function foo2()
infoo2
it's a constructor.正确的答案不是
foo2
中的function foo2()
它是一个构造函数,尽管它确实是一个构造函数。答案是
foo3()
是new foo3()
中调用的构造函数。该构造函数调用foo2()
方法。实际上,由于
foo3
没有调用其父构造函数,因此调用了较新的 foo2 构造函数。因为您调用了
foo3()
两次,所以foo3
中的function foo3()
是一个 构造函数 文档:第一次调用:
第二次调用:
给 foo3 一个真正的构造函数,就可以了:
The correct answer is not that
function foo2()
infoo2
it's a constructor, although it's true that it's a constructor.The answer is that
foo3()
is the constructor called innew foo3()
. This constructor calls the methodfoo2()
.Actually the constructor of
foo2
newer is called sincefoo3
has not a call to his parent constructor.Because you are calling
foo3()
two times,function foo3()
infoo3
is a constructor Docs:First call:
Second call:
Give
foo3
a real constructor and you're fine: