子类是否可以实现接口?

时间:2011-01-26 16:48:26

标签: php oop strategy-pattern

我正在用更严肃的OOP(以前只是使用继承)浸泡我的脚趾,我偶然发现了让我感到困惑的事情。

我有一个处理数据库连接的超类。

我有一个子类来处理与站点的成员函数相关的连接

我想使用策略模式来允许不同但相似的功能共存。例如:

  • 连接数据库并检查名称 并通过电子邮件发送新注册
  • 连接数据库并检查用户名和确认码以进行注册确认
  • 连接数据库并检查登录用户名和密码

2 个答案:

答案 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)),或者直接在各种服务对象的构造函数中将其传递给参数。