子对象之间的共享方法

问题描述:

我想共享属于父对象的对象之间的方法。子对象之间的共享方法

我有一个主对象,它有处理不同任务的子对象。

class engine { 

    public function __construct() { 

    $this->db = new db(); 
    $this->url = new url(); 
    $this->template = new template(); 

    } 

} 

这里是我会怎么用我的主要对象为例:这些正在使用的主要对象构造函数创建

$engine = new engine(); 

$engine->db->connect(); 
$engine->url->parse(); 
$engine->template->render(); 

子对象如何可以访问其他孩子的方法(例如,如何可以template->render()致电url->parse())?

+3

你的设计是破称呼它Url::parse();。为什么一个模板对象,负责显然是呈现一些东西,必须调用url-> parse?如果你有这个解释,你的问题的答案是使用[依赖注入](http://*.com/questions/6094744/dependecy-hell-how-does-one-pass-dependencies-to-deeply-嵌套对象/ 6095002#6095002)。 – Gordon

+0

这是我给的一个不好的例子。在我的设计中,渲染模板的选择将取决于所需的URL(所以我想通过URL对象解析,而不是在模板定义中重新创建)。依赖注入是我一直在寻找的,所以谢谢。 –

+1

您可能还对[SOLID](https://secure.wikimedia.org/wikipedia/en/wiki/Solid_%28object-oriented_design%29)和[GRASP](https://secure.wikimedia.org/)感兴趣*/ en/wiki/GRASP_%28object-oriented_design%29)和[Demeter法](https://secure.wikimedia.org/wikipedia/en/wiki/Law_of_Demeter)和[Clean Code Talks] //www.youtube.com/results?search_query=The+Clean+Code+Talks&aq=f) – Gordon

你可以设置一个类的静态属性和staticaly称之为:

static public function parse() { 
    <some code> 
} 

$template->render();

+0

OP询问OOP不是关于基于类的编程和/或如何通过紧密耦合来破坏应用程序的可维护性。参见http ://kore-nordmann.de/blog/0103_static_considered_harmful.html – Gordon

+0

如果您没有意识到,问题是:“孩子如何访问其他孩子的方法”。所以这是他们的方式。 –

+0

是的,以最不理想的方式。如果你这样做,你可以完全抛弃这些对象并使用程序编程。 – Gordon