Как и когда мы должны использовать Интерфейс для документирования систем, в PHP?


Всегда хотел точно знать, если это хорошая практика, система всегда делает использование Интерфейсов, или это не нужно?

Interface People {
  public function getName();
  public function setName($string);
  public function getAge();
  public function setAge($string);
}

class User implements People {

  private $name;
  private $age;

  public function __construct()
  {
   return $this; 
  }

  public function setName($string)
  {
     $this->name = $string;
     return $this;
  }

  public function getName()
  {
    return $this->name;
  }

  public function setAge($number)
  {
    $this->age = $number;
    return $this;
  }

  public function getAge()
  {
    return $this->age;
  }

}
Author: Ivan Ferrer, 2015-11-26

2 answers

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

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

Интерфейс контракта, которые должны соблюдаться при реализации. Ввода данных также контракт. Не знаю, почему игнорируют форму и следуют за другой. Может быть, сами языки были признав, постепенно они использовали философию для типирования неправильно, по крайней мере, для наиболее важных целей.

Существуют языки сценария и языки предприятие, среди других, PHP был язык сценария, что теперь хочет быть язык предприятие, но наследие не позволяет сделать этот переход.

, То на уровне более выше нас должен спросить себя: почему будет использовать меры, чехол на языке, который оставляет в стороне другие защитные меры наиболее важны? Немногие совершают этот вопрос, и много что сделают серьезно, и могут ответить, будут решите поменять язык.

Ясно, что в какой-то мере защитной лучше, чем ничего, она выгодна сама по себе, не только за это.

Она также обобщает (абстрагирует), что собираетесь сделать, и это хорошо. Это является одной из причин, даже лучше, чтобы использовать интерфейс. Я не буду подробно объяснить здесь, потому что уже есть ответ на это.

В резюме, когда у нас есть интерфейс, реализованный мы можем использовать его, чтобы указать, что только то, что присутствует в ней то, что нам нужно. И что любой класс, который реализует, может быть использовано конкретным образом, чтобы удовлетворять определенным алгоритмом. Это делает обслуживание и настройку приложения. Вы не прикрепляется к конкретной реализации. Преимущества описаны в вопрос linkada выше.

И в Другие языки сценария более последовательными предпочитают duck typing.

См. подробнее в что такое стиль типирования?.

 13
Author: Maniero, 2020-10-08 11:32:59

Главное преимущество, что вижу этого в PHP-это вопрос, гибкость и программиста, и в случае использования библиотеки, где он реализует свою собственную функцию.

В Этом случае, программист мог бы просто использовать свой собственный класс, так что он реализует интерфейс, необходимой для выполнения такой операции.

, например: в Эти дни, был возникли проблемы с библиотекой из Facebook, потому что я использую Laravel и Laravel и не использует сеанс родной PHP. O Facebook использует систему собственного PHP. В результате получается, что возникли проблемы.

Класс Facebook реализует интерфейс под названием PersistentDataInterface. Этот интерфейс владел методами set и get, необходимы, чтобы определить, как данные будут сохранены в сессии.

Ввода данных производится с помощью PersistentDataInterface, я реализовал, в результате чего методов сохранить и получить данные прямо из сеанса Laravel.

Таким образом, все работало верно.

, То вот пример:

interface PersistentData {
    public function set($key, $value);
    public function get($key);
}

class Library{
      public function __construct(PersistentData $persist)
      {
            $this->persist = $persist;
      } 
}

class ClasseQueNaoAtendeMeuSistema implements PersistentData
{
     public function set($key, $value) { ... }
     public function get($key);
}

, Посмотрите, в этом случае, чем construtor класс Library требует типизации является внедрение interface, а не classe в себя. Таким образом, это дает больше гибкости, так что я создать другой класс с методами интерфейса, однако, что делают сохранение данных другому!

Я Считаю, что использование интерфейса, это хорошая практика, когда вы хотите предложить больше способов библиотеки сможет взаимодействовать с другими класс. Как вы "заставляет" класса третьего использовать методы через интерфейс, вы можете вызвать метод объекта, переданного через параметр не "бояться того", что метода не существует, и остаться, что делают тысячи ifs method_exists.

БУДУЩЕМ

PHP7 будет замечательно добавить ресурс из интерфейсов classes anônimas, так как это дает больше гибкости по-прежнему. См., например, в приведенном выше случае, что может быть сделано.

$tempPersist = new class(Database::connection()) implements PersistentData
{
    public function __construct(Database $database)
    {
         $this->database = $database;
    }
    public function set($key, $value)
    {
       $this->database->table('session')->save([$key=>$value]);
    }  

    public function get($key)
    {
         return $this->database->table('session')->get($key);
    }
   
}


 $lib = new Library($tempPersist);
 6
Author: Wallace Maxters, 2020-06-11 14:45:34