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

Php 如何在父类的属性中存储子类?,php,inheritance,parent-child,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 __constr

这似乎很简单,但我现在很长一段时间都没有完成

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访问主类的sub1属性时,我不理解为什么它是空的。谁能给我解释一下吗?我是否在OOP编程方面犯了一些基本错误?我伤害了任何观念吗?有没有更好的解决办法


致以最良好的祝愿

您正在Sub1和Sub2中重写Main的
\u构造()
,这意味着永远不会调用Main的构造。即使在Sub1和Sub2的构造中调用
parent::u construct()
,也会得到一个无限循环,因为Main的构造正在初始化这两个子结构

编辑:既然您想共享对象,这里有几个问题可以帮助您:


您在Sub1和Sub2中都重写了Main的
\u构造()
,这意味着永远不会调用Main的构造。即使在Sub1和Sub2的构造中调用
parent::u construct()
,也会得到一个无限循环,因为Main的构造正在初始化这两个子结构

编辑:既然您想共享对象,这里有几个问题可以帮助您:


你怎么能指望自己不会致命呢。您正在尝试访问$Sub1,但没有它的实例。您需要了解的是对象的实例化。当您编写一个类时,它只是一个定义。你需要一个实例来处理。

你怎么能指望自己不会致命呢。您正在尝试访问$Sub1,但没有它的实例。您需要了解的是对象的实例化。当您编写一个类时,它只是一个定义。您需要一个实例来处理。

我认为您可以解释您试图解决的问题,显然您不能以这种方式解决,但我猜您的问题不应该取决于您提供的解决方案。
所以也许有人能给你一个好的答案。

我想你可以解释你想解决的问题,显然你不能用这种方式解决,但我猜你的问题不应该取决于你的解决方案。
所以也许有人能给你一个好答案。

谢谢。现在我甚至理解了为什么在静态上下文中调用构造函数(:谢谢。现在我甚至理解了为什么在静态上下文中调用构造函数(: