orbitroom
@orbitroom
Fullstack, laravel, php, js, css. Стаж 10 лет

Привязан ли как-нибудь интерфейс php к своей реализации?

Доброго времени суток.

Периодически встречаю конструкции типа

ClassController {
  public function actionIndex(CacheItemInterface $cache) {
    $cache = Request::post('input');
  }
}


Для чего служат подобные вызовы и что конкретно в них проиходит?

В ларавеле подобная конструкция может означать вызов привязанной через сервис конкретной реализации данного интерфейса.
  • Вопрос задан
  • 486 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Нет, не привязан. Это Liskov Substitution Principle и Interface Segregation Principle aka буквы L и I в SOLID.

Для чего служат подобные вызовы и что конкретно в них проиходит?
Это не вызовы, а тайпхинты - подсказки типов для интерпретатора. Нужны они только для того, чтобы в рантайме выбросилось исключение, если в функцию был передан аргумент некорректного типа.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@LemonFox
stateless mind
Класс может реализовывать (implements) интерфейс.
Интерфес говорит нам какие методы должны быть у класс, без их непосредственной реализации (это ложится на обязанности класса).

В данном примере могут быть несколько классов, реализующих CacheItemInterface, чтобы можно было реализовать несколько кеш-провайдеров (файловый кеш, мемкеш итд)

php.net/manual/ru/language.oop5.interfaces.php

Upd: В указанном примере довольно странно что $cache переприваивается какое-то значение.
Скорее должно быть что-то
$data = $cache->get('key'); // При этом метод get должен быть указан в интерфейсе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы