看起来很简单,但我现在还没有完成它......
class Main
{
public $sub1;
public $sub2;
public function __construct()
{
$this->sub1 = new Sub1();
$this->sub2 = new Sub2();
}
}
class Sub1 extends Main
{
public function __construct() {}
public function helloWorld()
{
echo "hello world";
}
}
class Sub2 extends Main
{
public function __construct()
{
$this->sub1->helloWorld();
}
}
new Main();
代码的结果是致命错误:调用成员函数helloWorld()。但为什么?我不明白为什么当我尝试从sub2访问它时,Main类的sub1属性为NULL。有人可以向我解释一下吗?我在OOP编程方面做了什么基本上错了吗?我是否伤害了任何概念?有没有更好的解决方案?
祝你好运!
答案 0 :(得分:1)
你在Sub1和Sub2中重写Main __construct()
,这意味着永远不会调用Main的构造。即使你在Sub1和Sub2的构造中调用parent::__construct()
,你也会得到一个无限循环,因为Main的构造正在初始化两个subs。
编辑:由于您想要共享对象,以下是一些可以提供帮助的SO问题:
Sharing objects between PHP classes
How to create an object in a parent class shared by its children classes?
答案 1 :(得分:0)
你怎么能指望你不致命。您试图访问$ Sub1而没有它的实例。您需要了解的是对象的实例化。在编写类时,它只是定义。您需要一个实例来处理。
答案 2 :(得分:0)
我认为你可以解释你想要解决的问题,显然你不能这样做,但我猜你的问题不应该依赖于你带来的解决方案。 所以也许有人可以为你找到一个好的答案。