所以我很难解决 PHP 没有多重继承的概念。
我有一个想法,我画出了我想这样做的地方:
Loop extends LoopHelper <-> [ Single, Query, Page] *
**LoopHelper would extend each class in the brackets.
注意:(*)想法是:括号中的任何类都从循环助手扩展,其中循环助手从括号中的任何类扩展(显然不可能,请继续阅读)
这个想法是 Loop 可以抽象出很多它的逻辑。但是由于我们都知道 PHP 不支持多重继承(有这个 hack),我正在寻找另一种方法来做到这一点,以便 Loop 可以通过一个(或多个)父级来获得访问权限to Single.php
,Query.php
并且Page.php
不必实例化它们...
有没有一种有效的方法来做到这一点?还是我疯了?
我所做的Loop
是创建一个initilize_helper()
方法,将所有这三个类实例化为三个单独的类级别变量,然后可以使用这些变量调用您需要的方法。(这既不干净,又将Single
,Query
和Page
类与Loop
(since Single
, Query
and Page
extend from LoopHelper
)
我提出的这个想法有一些明显的缺陷,我想要但不认为我能得到的东西。
Loop($options)
传递选项LoopHelper
,然后将它们分发给每个“扩展类”(注意引号),然后(注意示例中的 <->)循环可以通过 Single、Query 或 Page 调用函数$this
问题,没有多重继承,没有语言(我知道,如果我错了请纠正我)允许两种方式继承,所以LoopHelper extends from Single, Single extends from LoopHelper
归根结底,我期望的是:
Loop
应该能够调用任何Single
,Query
或Page
类方法,同时确保,例如,如果你传入一个 options 数组,这些选项通过某种“桥”传递给三个类中的每一个,什么都不应该依赖除了“桥”之外的任何东西,如果需要,“桥”可以是多个类。
//Loop --> ($options) -> __Some_Kind_Of_Bridge __ --> ($options) -> [Single, Query, Page]
class Loop extends Some_Kind_Of_Bridge{
public function call_methods(){
$this->some_page_method();
$this->some_query_method();
$this->some_single_method();
}
}
$loop = new Loop(array('some', 'values'));
$loop->call_methods();
你会注意到我没有在 中创建构造函数Loop
,如果你不创建,php 默认使用父类构造函数。背部练习我知道,但这只是一个例子。
依赖注入看起来很有希望,但它是我真正需要的 - 在这样的情况下如何实现它?- 除了桥牌课程之外,没有任何东西取决于任何东西。
解决这个既是面向对象又是干净的问题的最简单方法是什么?(几乎没有耦合)。
我应该看看他们的一些模式吗?
更新
这篇文章不涉及可以扩展多个类的接口,这与类->类继承有关。如果接口是要走的路,请解释我如何在这种情况下实现它们。