2

我听说你不能使用两次extend。

我有两节课:

Base32 和 SecureRandom

我需要 TOTP。

我怎样才能使用这两者呢?

4

3 回答 3

5

使用接口组合(包括一个类的实例作为类的成员变量)。

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

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

于 2011-04-24T03:52:07.797 回答
2

看看PHP5.4 Traits,它们可以解决多重扩展的问题。

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

例如:

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)
于 2014-02-12T10:20:35.173 回答
0

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

于 2011-04-24T03:52:15.847 回答