Этот вопрос может показаться очевидным и может быть глупым. Но я пытаюсь понять, зачем мне использовать интерфейсы? Я думаю, что я могу справиться с большинством вещей, с которыми интерфейсы работают с использованием классов, и зачем им их использовать? Это правда, что я могу столкнуться с проблемами, если я не интерфейсы, но я пытаюсь выяснить, какие проблемы вызваны не использованием интерфейсов?Реализация интерфейсом реального мира
Одно использование интерфейсов заключается в том, что они позволяют нам определять поведение и устанавливать ограничения на классы, которые их реализуют.
Другое использование - это интерфейс, который работает как типы, и я могу использовать интерфейсы для намека типа, как показано ниже.
//Java example
public interface IPaintable{
void Paint(System.Drawing.Color color);
}
public void Paint(IPaintable item, System.Drawing.Color color){
item.Paint(color);
}
Но есть ли другое использование интерфейсов в PHP?
I.e. Какие преимущества я получу, используя интерфейсы в приведенном ниже коде.
//Non interface implementation
<?php
class DBPersonProvider
{
public function getPerson($givenName, $familyName)
{
/* go to the database, get the person... */
$person = new Person();
$person->setPrefix("Mr.");
$person->setGivenName("John");
return $person;
}
}
/* I need to get person data... */
$provider = new DBPersonProvider();
$person = $provider->getPerson("John", "Doe");
echo($person->getPrefix());
echo($person->getGivenName());
?>
//Implementation with interface
<?php
interface PersonProvider
{
public function getPerson($givenName, $familyName);
}
class DBPersonProvider implements PersonProvider
{
public function getPerson($givenName, $familyName)
{
/* pretend to go to the database, get the person... */
$person = new Person();
$person->setPrefix("Mr.");
$person->setGivenName("John");
return $person;
}
}
/* I need to get person data... */
$provider = new DBPersonProvider();
$person = $provider->getPerson("John", "Doe");
echo($person->getPrefix());
echo($person->getGivenName());
?>
Вы определяете ** протокол ** с использованием интерфейса. То, что вы получаете, является основой надежности. Представьте себе «Личность». У каждого человека есть тело, у которого есть органы. Поэтому ваш интерфейс будет реализовывать органы. Каждый человек отличается. Джон, Джек, Майкл, Кристина и т. Д. Все разные, но сделаны из функционально одинаковых компонентов. Поэтому, когда вы создаете нового человека, вы ** имеете **, чтобы создать свои основные части, которые взаимодействуют и заставляют тело работать. Вот почему существуют интерфейсы - они применяют протокол для любого класса реализации. –
Согласен. Я указал на это в своем вопросе «Одно использование интерфейсов заключается в том, что они позволяют нам определять поведение и устанавливать ограничения на классы, которые их реализуют». –
Это все, что вы получаете. Других преимуществ использования интерфейсов нет. Если у вас небольшой проект, вы, вероятно, ничего не выиграете. Однако если 50 из вас работают над проектом, и вы являетесь основным разработчиком функции - это умный переход к использованию интерфейса, который реализуется абстрактным классом, который затем расширяется классами, которые делают другие разработчики. И вы просто применяете протокол. В основном это архитектурная и организационная вещь. –