【问题标题】:Sharing Methods Between Child Objects子对象之间共享方法
【发布时间】:2011-11-24 15:09:31
【问题描述】:

我正在尝试在属于父对象的对象之间共享方法。

我有一个主对象,它有处理不同任务的子对象。这些是使用主对象构造函数创建的:

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())?

【问题讨论】:

  • 你的设计坏了。为什么一个显然负责渲染某些东西的模板对象必须调用 url->parse?如果您对此有解释,您的问题的答案是使用Dependency Injection
  • 那是我举的一个坏例子。在我的设计中,呈现的模板的选择将不时取决于请求的 URL(因此我想通过 URL 对象进行解析,而不是在模板定义中重新创建某些内容)。依赖注入是我一直在寻找的,所以谢谢。
  • 您可能还对SOLIDGRASP 以及Law of DemeterThe Clean Code Talks 感兴趣

标签: php oop class object scope


【解决方案1】:

您可以设置一个类的静态属性并静态调用它:

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

并像 Url::parse(); 一样从 $template-&gt;render(); 调用它

【讨论】:

  • OP 询问 OOP 而不是基于类的编程和/或如何通过紧密耦合来破坏应用程序的可维护性。请参阅 kore-nordmann.de/blog/0103_static_considered_harmful.html
  • 如果你不认识,问题是:“子对象如何访问其他子对象的方法”。所以他们可以这样做。
  • 是的,以最次优的方式。如果你这样做,你也可以完全放弃对象并使用过程编程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 2019-02-05
  • 2012-08-18
  • 2020-04-02
  • 1970-01-01
相关资源
最近更新 更多