我想知道我是否可以在父对象中创建子对象并使用它...
我正在使用子类,我也希望在父类的私有函数中使用它们。
感谢
这里有一些来源想象我的意思:
class A{
private $child_class1;
private $child_class2;
private function somefunction(){
$this->child_class1 = new B();
$this->child_class1->do_something();
$this->child_class2 = new C();
$this->child_class2->do_something();
}
}
class B extends A{
public function do_something(){
...
}
}
class C extends A{
public function do_something(){
...
}
}
答案 0 :(得分:2)
您可以使用抽象方法将某些操作委托给派生类:
class A {
public function __construct() {
$this->do_something();
}
protected abstract function do_something();
}
class B extends A {
protected function do_something() {
// ...
}
}
这样做当然不是一个好主意。这取决于你想要达到的目标,以及原因。在父构造函数中创建派生类(如前面的例子所述)是不可能的。语言可能允许它,但它将导致无限循环的实例化。你肯定需要解释你为什么要这样做。否则,没有人能够帮助你。
答案 1 :(得分:1)
这似乎是一个坏主意恕我直言 - 它需要高维护,你在课间创造一些紧密的联系。
我建议在父母中创建一个抽象函数,每个孩子都会用它自己的逻辑来实现。
[编辑],因为你试图遍历所有子对象,我建议创建一个基类来处理所有需要对所有子进程实现的逻辑,并在每个需要额外的子类中覆盖它逻辑,并调用其中的父函数。
答案 2 :(得分:1)
我认为最重要的问题应该是你想要它的原因。我无法想出一个可以扩展某些东西的可靠设计(默认示例可以是家具,例如GardenChair扩展椅子)可以在父类中使用。
整个想法是它应该是相反的方式。
如果你想调用'do_something',你应该创建一个子实例,让它自己调用。如果您需要强制执行do_something
,请尝试这样:
public abstract class A{
public abstract funcion do_something();
public function __constructor(){
$this->do_something();
}
}
public class B extends A{
public funcion do_something(){
...
}
}
public class C extends A{
public funcion do_something(){
...
}
}