【发布时间】:2019-01-01 18:21:26
【问题描述】:
我有多种付款方式(Stripe、Paypal、PayUMoney 等)。我想为每种支付类型创建一个单独的类,并为这些类创建一个 支付接口,
interface PaymentInterface {
public function payment($params);
}
class Stripe implements PaymentInterface {
public function payment($params) { ... }
}
class Paypal implements PaymentInterface {
public function payment($params) { ... }
}
在我的主课中,我想使用一种付款方式。我会将付款数据发送到我的主要方法,并希望动态检测付款方式。
class PaymentModule {
public function confirmPayment(Request $request){
// create an object of the payment class
// $obj = new PaymentTypeClass **(Problem is here)**
// $obj->payment($params)
}
}
我的问题在这里,我如何动态创建相关的支付类/对象并从主方法调用 payment() 方法?
如果我有条件地创建对象,那么我就违反了开闭原则。因为,我正在使用 If ... else 检查支付类型,然后创建对象并调用可能需要进一步修改的 payment()。
【问题讨论】:
-
只需从您的数据库或其他什么中提取类。可以是变量:
$class = 'Paypal'; $obj = new $class; $obj->payment($params);
标签: php oop design-patterns solid-principles open-closed-principle