如何将子类存储在父类的属性中?

时间:2011-12-02 05:54:03

标签: php inheritance parent-child

看起来很简单,但我现在还没有完成它......

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编程方面做了什么基本上错了吗?我是否伤害了任何概念?有没有更好的解决方案?

祝你好运!

3 个答案:

答案 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)

我认为你可以解释你想要解决的问题,显然你不能这样做,但我猜你的问题不应该依赖于你带来的解决方案。 所以也许有人可以为你找到一个好的答案。