我正在用更严肃的OOP(以前只是使用继承)浸泡我的脚趾,我偶然发现了让我感到困惑的事情。
我有一个处理数据库连接的超类。
我有一个子类来处理与站点的成员函数相关的连接
我想使用策略模式来允许不同但相似的功能共存。例如:
答案 0 :(得分:2)
抽象类可以在PHP中扩展超类吗?
此
class A {}
abstract class B extends A {}
class C extends B {}
var_dump( new C );
给出
object(C)#1 (0) {}
所以答案是:是的,抽象类可以在PHP中扩展超类。
标题更新后编辑:
是的,子类实现接口完全没问题。但是,在策略的上下文中,您可能不会在除了捕获抽象的接口之外的任何其他接口上调用方法,并在派生类中隐藏实现细节。见http://sourcemaking.com/design_patterns/strategy
答案 1 :(得分:0)
在不知道您的代码的情况下,这很难回答。根据我的问题,我会说在这种情况下你应该使用构图而不是继承。
您可以拥有各种“服务类”,其中包含数据库连接以进行与特定问题域相关的查询。他们都有一个可以用来进行查询的属性$dbConnection
。您可以使用依赖注入从外部设置该属性,或者使用setter方法(setDbConnection($dbConnection)
),或者直接在各种服务对象的构造函数中将其传递给参数。