我是OOP的新手,我有一个基本上非常基本的问题,但是我很难以简洁的方式解释它,所以很难找到答案.
我有一个支持信用卡处理的应用程序,我想抽象处理功能,所以我可以添加其他提供程序(linkpoint,authorize.net等).我想我想要做的是创建一个看起来像这样的简单类:
class credit {
function __construct($provider){
// load the credit payment class of $provider
}
}
Run Code Online (Sandbox Code Playgroud)
然后我会让提供者各自扩展这个类,例如
class linkpoint extends credit { }
Run Code Online (Sandbox Code Playgroud)
但我真的想把信用类更像是一个界面.我不想要信用对象,我想做一些像:
$credit = new credit('linkpoint');
Run Code Online (Sandbox Code Playgroud)
然后我希望$ credit成为linkpoint类的一个实例.或者至少,我希望所有方法都执行linkpoint类中定义的代码.
接近这个的最佳方法是什么?或者有更好的方法吗?
你可以像这样处理它
class Credit
{
public function __construct($factory)
{
$object = null;
switch($factory) {
case 'linkpoint':
$object = new linkpoint();
break;
case 'xy':
//...
}
return $object;
}
}
Run Code Online (Sandbox Code Playgroud)