繁体   English   中英

PHP中的多个扩展

[英]Multiple Extends in PHP

我听说您不能两次使用扩展。

我有两节课:

Base32和SecureRandom

我需要TOTP。

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

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

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

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

看一下PHP5.4特性,他们解决了多种扩展问题。

将它们与接口结合起来以获得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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM