Php Laravel, зачем отдавать контракт в контсруктор класса?

Изучаю laravel->контракты и возник такой вопрос:
<?php

namespace App\Orders;

use Illuminate\Contracts\Cache\Repository as Cache;

class Repository
{
    /**
     * Экземпляр кэша.
     */
    protected $cache;

    /**
     * Создание нового экземпляра репозитория.
     *
     * @param  Cache  $cache
     * @return void
     */
    public function __construct(Cache $cache)
    {
        $this->cache = $cache;
    }
}

Зачем нам контракт передавать в конструктор, ведь нам нужно его реализовать? Или я чего не понимаю. Или статью покажите где это рассказывается.
  • Вопрос задан
  • 689 просмотров
Пригласить эксперта
Ответы на вопрос 4
@mykolaim
PHP developer
Гуглите dependency injection laravel.
Ответ написан
Комментировать
JhaoDa
@JhaoDa
LaravelRUS Team
Комментировать
DJZT
@DJZT
Laravel - code for you
Контракт подразумевает, что у него есть один основной релизованный класс. Но так же мы можем и поменять его.
К примеру с БД mysql основной, если он в конфиге прописан. Так же есть и другие драйвера БД работающие по контрактую. Почта, кэш, репозитории и много другого раюотаютт так же
Ответ написан
Комментировать
@PashaNedved
Если бы вам нужно было реализовывать контракт, то в объявлении класса это было бы указано, например:
class Repository implements RepositoryInterface
или
class Repository extends AbstractRepository

В вашем примере класс Repository не реализует никаких контрактов. А в конструкторе подключается уже готовая реализация контракта (то есть интерфейс).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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