Несколько расширений в PHP - PullRequest
2 голосов
/ 24 апреля 2011

Я слышал, что нельзя использовать расширение дважды.

У меня есть два класса:

Base32 и SecureRandom

, которые мне нужны для TOTP.

Как я могу использовать оба из них для этого?

Ответы [ 3 ]

5 голосов
/ 24 апреля 2011

Используйте интерфейсы или состав (включите экземпляр одного из классов в качестве переменной-члена класса).

Интерфейсы позволяют определять прототипы для методов в классе. Затем класс implements этого интерфейса и должен определять метод для каждого прототипа в интерфейсе. Вы можете наследовать только один класс (extends), но вы можете implements произвольное количество интерфейсов.

Если вы обнаружите, что интерфейсы не соответствуют вашей задаче, просто используйте композицию.

2 голосов
/ 12 февраля 2014

Взгляните на PHP5.4 Черты они как бы решают проблему множественных расширений.

Объедините их с интерфейсами, чтобы получить экземпляр функциональности.

Например:

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)
0 голосов
/ 24 апреля 2011

PHP не допускает множественного наследования. Вам нужно расширить один из них, а другой - как частную переменную или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...