2012-05-09 24 views
1

我需要我的父类能够访问子类中的方法。子类显然能够访问它们的继承父类方法。从另一个类中访问类中的类

但是,如果小孩A想要借用属于小孩B的玩具呢?孩子A会询问父母是否可以从孩子B借用该玩具。父母告诉孩子A他们会从孩子B的房间抓住它并将其交给孩子A玩。

我也在下面创建了这个场景来帮助说明我在这里需要什么。不太确定如何去做这件事。

[故事]

假设你购买了新房子。您希望您的小时的某些区域重新涂漆。哦,顺便说一下,你需要看你的管道。

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

人会在房子里发现问题区域,并写下来。然后,人员需要找一名水管工和一名画家并给他们打电话,报告他们的问题。

然后,管道工和画家将向他们展示他们的专业工具和设备,以便继续他们的工作。

众议院将有这些方面:

  1. 卫生间
  2. 水槽
  3. 淋浴
  4. 外部壁板
  5. 内墙

    • 水管工需要进入厕所,水槽和淋浴间。
    • 画家将需要访问外墙和内墙。

所以水管工和画家在房子已经抵达,开始做自己最擅长的。

首先,水管工需要在内部完成他的工作,所以一旦水管工完成,画家将开始画外墙并移动到内墙。

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

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

在这种情况下哪种类型的结构最好?我阅读了一些吸引我兴趣的模式。

命令模式&对象池。

我在想对象池是更多的路线。这里的任何输入?另外,如果我确实采用了Object Pooling路由,是否最好在构造函数中实例化每个类并准备好以后使用它?或者,我是否应该仅在需要使用它时实例化每个类? (可能通过一些“运行”或“执行”方法完成)。

示例将不胜感激。

此外,我不希望使用静态调用!

+0

另一个例子:比方说,家长想知道什么书child_a正在读'$父 - >运行( 'child_a', 'get_book');'这将等同于'$ child_a->。 get_book();' –

+0

其中get_book()在基类中定义?并在派生中实现?如果方法未在基​​类中定义,那么它如何知道派生类方法? – Brady

+0

'child_a'会自动在父类中实例化。 'get_book()'在子类中定义:'child_a'。父方法的运行只是简单地说它需要执行'child_a'方法'get_book();' –

回答

0

如果我理解正确,您想要做的是在您的父类中创建一个static变量,该变量包含对您的子实例的所有引用(您必须自己跟踪实例,例如在function __construct和。function __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(); 
     } 
    } 
+0

更新了我的问题。 –