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