Когда расширять класс по сравнению с интерфейсом в PHP?

Скажем, я создаю сундук с замком …

простирающийся

  class Lock
{
public $locked = false;
function lock()
{
$this->lock = true;
}
function unlock()
{
$this->lock = false;
}
}

class Chest extends Lock
{
}

$myChest = new Chest;

Использование интерфейсов:

<?php
interface Lock
{
protected $locked;
function lock();
function unlock();
}
trait LockTrait
{
protected $locked = false;
function lock()
{
$this->lock = true;
}
function unlock()
{
$this->lock = false;
}
}
class Chest implements Lock
{
use LockTraits;
}
$myChest = new Chest;

Использование внедрения зависимостей на основе классов:

  class Lock
{
public $locked = false;
function lock()
{
$this->lock = true;
}
function unlock()
{
$this->lock = false;
}
}

class Chest
{
protected $lock;
function __construct($lock)
{
$this->lock = $lock;
}
}

$myChest = new Chest(new Lock);

Существуют различия как в реализации, так и в характеристиках получаемого объекта. Расширение и использование интерфейсов приведет к Chest объекты, которые имеют свойства и методы Lock учебный класс. Внедрение нового экземпляра Lock класс в конструктор Chest класс приведет к свойству Chest класс, являющийся замком.

Мне кажется, что лучший способ создать мой Chest Цель состоит в том, чтобы ввести Lock экземпляр в Chest конструктор. Это приводит меня ко второму вопросу, хотя. Где бы я использовал интерфейсы и расширения?

Кажется, ответ на этот вопрос звучит так: «Когда у меня несколько классов, которые имеют сходные характеристики!» Я бы тогда использовал принцип «есть» для абстрактных черт.

Тем не менее, когда я должен расширить и когда я должен использовать интерфейсы? Я могу использовать много интерфейсов, пока могу только extend один урок. Зачем когда-либо продлевать? Почему бы просто не использовать интерфейсы?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector