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,但没有它的实例。您需要了解的是对象的实例化。当您编写一个类时,它只是一个定义。您需要一个实例来处理。我认为您可以解释您试图解决的问题,显然您不能以这种方式解决,但我猜您的问题不应该取决于您提供的解决方案。
所以也许有人能给你一个好的答案。我想你可以解释你想解决的问题,显然你不能用这种方式解决,但我猜你的问题不应该取决于你的解决方案。
所以也许有人能给你一个好答案。谢谢。现在我甚至理解了为什么在静态上下文中调用构造函数(:谢谢。现在我甚至理解了为什么在静态上下文中调用构造函数(: