从一个类访问另一个类中的类


Accessing a class within a class from another class

>我需要我的父类能够访问子类中的方法。子类显然能够访问其继承的父类方法。

但是,如果孩子A想借一个属于孩子B的玩具怎么办?孩子A会问父母是否可以从孩子B那里借玩具。父母告诉孩子A,他们会从孩子B的房间里拿走它,然后交给孩子A玩。

我还在下面创建了这个场景,以帮助说明我在这里需要什么。不太确定如何做到这一点。

[故事]

假设您购买了一栋新房子。您希望重新粉刷工作时间的某些区域。哦,顺便说一下,你需要看看你的管道。

所以我们有一个人,房子,画家和水管工。

该人将找到房屋中的问题区域,并将它们写下来。然后,该人需要找到水管工和油漆工并打电话给他们,报告他们的问题。

然后,水管工和画家将带着他们的专业工具和设备出现在房子里,继续他们的工作。

众议院将有以下区域:

  1. 厕所
  2. 淋浴
  3. 外部壁板
  4. 内墙

    • 管工需要使用马桶、水槽和淋浴。
    • 画家需要进入外墙和内墙。

所以水管工和画家已经来到房子里,开始做他们最擅长的事情。

首先,水管工

需要在内部执行他的工作,因此画家将从绘制外部壁板开始,并在水管工完成后移动到内墙。

水管工已经完成了他的工作。水管工向人员报告,让他们知道工作已完成。

然后,该人告诉画家水管工已经完成,当画家准备好时,画家可以开始绘制内墙。

在这种情况下,哪种类结构最好?我阅读了几个引起我兴趣的模式。

命令模式和对象池。

我认为对象池更像是要走的路线。这里有任何输入吗?

另外,如果我确实采用了对象池路由,那么在构造函数中实例化每个类并准备好供以后使用会更好吗?还是应该仅在需要使用每个类时才实例化每个类?(可能通过某种"运行"或"执行"方法完成(。

举例说明将不胜感激。

另外,我宁愿不使用静态调用!

如果我

理解正确,您要做的是在父类中创建一个static变量,该变量包含对子实例的所有引用(您必须自己跟踪实例,例如在您的function __constructfunction __destruct中。

class Parent {
    public static $references = array;
    public function __construct() {
        Parent::$references[] = $this;
    }
    public function __destruct() {
        // loop through $references and kill $this from it.
    }
    public function run($ref, $func) {
         // find the reference in $references and store to $r
         if (method_exists($func, $r)) {
             $r->$func();
         }
    }