@Nentra

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

Разобрался как работают интерфейсы, только для меня осталось непонятным, а зачем они вообще нужны, какая от них польза на реальном проекте, если можно написать и без них и всё будет работать?
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 2
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Я в своей системе реализую некий UI Builder.
Есть предопределенные поля Input, Checkbox и т.д.
Однако, должна быть возможность создавать пользовательские поля.
При этом такие поля обязаны придерживаться определенных соглашений, чтобы система не сломалась. Например, поля обязаны реализовать метод render. И не как-то, и именно так, как положено.
Для этого я во всех встроенных полях реализую интерфейс FieldContract

interface FieldContract {
  public function render(Repository $repository): ViewContract;
}


Теперь сторонний разработчик, захотевший написать расширение к системе будет обязан реализовать в своих кастомных полях интерфейс FieldContract.
А я внутри системы всегда уверен, что у поля есть необходимый метод с необходимой сигнатурой, даже если это поле реализовал сторонний разработчик.
Ответ написан
Комментировать
@Dark_Dante
Пример интерфейса
interface StorageInterface
{
    /**
     * Сохранить файл. Возвращает строкой относительный путь до файла
     *
     * @param string $directory - директория
     * @param string $content - контент файла в бинарном представлении
     * @param string $fileName - название файла для сохранения
     *
     * @return bool
     *
     * @throws Exception
     */
    public function save(string $directory, string $content, string $fileName): bool;

    /**
     * Метод проверки наличия файла по относительному пути
     *
     * @param string $filePath
     *
     * @return bool
     */
    public function isFile(string $filePath): bool;

    /**
     * Получить файл в виде ДТО
     *
     * @param string        $directory
     * @param string        $realFileName
     * @param string | null $fileName - пользовательское имя файла
     *
     * @return GetFileDTO
     *
     * @throws FileNotFoundException
     */
    public function getFile(
        string $directory,
        string $realFileName,
        ?string $fileName = null
    ): GetFileDTO;

    /**
     * Удалить файл по пути
     *
     * @param string $directory
     * @param string $fileName
     *
     * @return bool
     */
    public function deleteFile(string $directory, string $fileName): bool;
}


Его реализуют LocalStorage, AWSStorage, и еще куча куча других хранилищ для файлов.

И делая вот так,

public function methodFile(StorageInterface $storage): mixed
    {
        $storage->save();
        $storage->deleteFile();
        $storage->getFile();
        $storage->isFile();
    }


я всегда знаю что у меня все эти четрые метода будут доступны независимо от того где я файл храню - тут же в папочке на сервере, в облаке, в FTP и тд.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽