PHP中的多个扩展

时间:2011-04-24 03:48:12

标签: php oop extends

我听说你不能使用延长两次。

我有两个班级:

Base32和SecureRandom

我需要TOTP。

我怎样才能同时使用它们?

3 个答案:

答案 0 :(得分:5)

使用interfacescomposition(包括其中一个类的实例作为类的成员变量)。

接口允许您为类中的方法定义原型。然后是一个类implements,该接口必须为接口中的每个原型定义一个方法。您只能直接从一个类(extends)继承,但可以implements任意数量的接口。

如果您发现界面不适合您的任务,请使用合成。

答案 1 :(得分:2)

看看PHP5.4 Traits他们解决多重延伸的问题。

将它们与接口结合以获得instanceof功能。

例如:

interface ClientAwareInterface {
    public function setClient($client);
}

trait ClientAwareTrait {
    protected $client;

    public function setClient($client)
    {
        $this->client = $client;
    }
}

class Shop implements ClientAwareInterface extends SomeClass {
    use ClientAwareTrait; // use our trait to implement interface methods
    use OtherTrait;
}

$shop = new Shop();
if($shop instanceof ClientAwareInterface) {
    $shop->setClient('test');
    var_dump($shop); 
}

结果将是:

object(Shop)[1]
  protected 'client' => string 'test' (length=4)

答案 2 :(得分:0)

PHP不允许多重继承。你需要扩展其中一个并将另一个作为私有变量,或类似的东西。