基本的PHP继承

时间:2012-05-10 17:30:14

标签: php oop

我是OOP的新手,我有一个基本上非常基本的问题,但我很难以简洁的方式解释它,因此很难找到答案。

我有一个支持信用卡处理的应用程序,我想抽象处理功能,所以我可以添加其他提供程序(linkpoint,authorize.net等)。我想我想要做的是创建一个看起来像这样的简单类:

class credit {

    function __construct($provider){
        // load the credit payment class of $provider
    }

}

然后我会让提供者各自扩展这个类,例如

class linkpoint extends credit { }

但我真的想把信用类更像是一个界面。我不想要信用对象,我想做类似的事情:

$credit = new credit('linkpoint');

然后我希望$ credit成为linkpoint类的一个实例。或者至少,我希望所有方法都能执行linkpoint类中定义的代码。

最好的方法是什么?或者有更好的方法吗?

4 个答案:

答案 0 :(得分:5)

这称为“factory pattern”(另见Design patterns

你可以像这样处理它

class Credit
{
  public function __construct($factory)
  {
    $object = null;

    switch($factory) {
      case 'linkpoint':
        $object = new linkpoint();
        break;
      case 'xy':
        //...
    }
    return $object;
  }
}

答案 1 :(得分:4)

我不确定我是否正确,但是如果你想将$ credit作为linkpoint的一个实例,那么你就必须这样做

$linkPointCredit = new linkpoint();

顺便说一下。您的班级名称应始终以大写字母开头。

<强>更新

然后你确实可以使用工厂模式。

class Credit
{
    private $provider;

    public function __construct($provider)
    {
        if(class_exists($provider) {
            $this->provider = new $provider();
        }
    }
}

答案 2 :(得分:1)

您所描述的内容听起来像Factory Design Pattern。除了使用构造函数之外,您将在基类Credit类上拥有一个类(静态)方法,该方法返回一个子类的实例,具体取决于传递的字符串。

答案 3 :(得分:0)

我建议“依赖注入”。

class credit {

    function __construct(Provider $provider)
    {
        $this->setProvider($provider);
    }

}

class Provider {}
class Linkpoint extends Provider {}
class crossave extends Provider {}
class Debitcentral extends Provider {}

然后你可以使用它们:

$linkpoint = new Linkpoint();
$credit = new Credit($linkpoint);

$crossave = new Crossave();
$credit = new Credit($crossave);

$debitcentral = new Debitcentral();
$credit = new Credit($debitcentral);
// etc...