Задать вопрос
Backend разработчик. PHP, Node.JS, GO, Redis, MongoDB, Memcached, MySQL, Zookeeper, ElasticSearch, Docker, Ansible, Microsoft Azure, шардинг, репликация, высоконагруженные системы, проектирование архитектуры системы, баз данных, DataMining, Data Architect.
Контакты

Достижения

Все достижения (13)

Наибольший вклад в теги

Все теги (57)

Лучшие ответы пользователя

Все ответы (77)
  • Какова роль интерфейсов в ООП?

    Приведу пример на коленке. Хотим, например, написать абстрактную файловую систему. Для начала, определим интерфейс, для ФС:

    interface FileSystemInterface {
      public function write($file, $data);
      public function read($file);
    }


    Затем, хочу реализацию интерфейса ФС для работы с файликами:

    class OSFileSystem implements FileSystemInterface {
      public function write($file, $data) {
         // открываем файлик, пишем данные
      }
    
      public function read($file) {
        // открываем файлик, возвращаем данные
      }
    }


    Вдруг, кому-то захотелось файловую систему в облаке. Окей, не проблема, реализуем это:
    class CloudFileSystem implements FileSystemInterface {
      public function write($file, $data) {
         // открываем соединение с облаком, пишем данные
      }
    
      public function read($file) {
        // открываем соединение с облаком, возвращаем данные
      }
    }

    Пусть у нас есть кой-то код, работающий с файловой системой, назовем его "Хранилище файлов". Пусть он выглядит примерно так:

    class FileStorage {
      protected $Fs;
      
      public function __construct(FileSystemInterface $Fs) {
        $this->Fs = $Fs;
      }  
    
      public function saveFile() {
        $this->Fs->write('file.txt', 'file data');
      }
    
      public function getFile() {
        return $this->Fs->read('file.txt', 'file data');
      }
    }


    Отлично! Теперь мы можем хранилищу файлов отдать любой объект с реализованным интерфейсом FileSystemInterface. Пример:

    // Хранилище файлов работает с файловой системой ОС:
    $FS = new OSFileSystem();
    $FileStorage = new FileStorage($Fs);
    $FileStorage->getFile();
    
    // Хранилище файлов работает с файловой системой в облаке:
    $FS = new CloudFileSystem();
    $FileStorage = new FileStorage($Fs);
    $FileStorage->getFile();


    Использование интерфейса, в данном случае. позволяет нам писать только реализацию работы файловой системы, а бизнес-логика, работающая с файловой системой никак не меняется, она знает, что в любом случае файловая система реализует интерфейс FileSystemInterface и может без опаски использовать методы этого интерфейса.
    Ответ написан
    14 комментариев
  • Как запустить KPHP?

    Клонируем репозиторий KPHP
    В папке с репой делаем
    make kphp
    Не забываем поставить нужные библиотечки.
    Смотрим /kphp-kdb/objs/bin/kphp2cpp
    Там можно увидеть
    Запускаем:
    ./kphp2cpp ../test-kphp/index.php
    Результат выполнения

    File [kphp/index.src_index389dab75@u.h] changed
    File [kphp/xmain.cpp] changed
    File [kphp/init_scripts.cpp] changed
    File [kphp/init_scripts.h] changed
    File [kphp/index.src_index389dab75@u.cpp] changed
    File [kphp/dfs0.index.src_index389dab75@u.h] changed
    File [kphp/dfs0.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs1.index.src_index389dab75@u.h] changed
    File [kphp/dfs1.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs2.index.src_index389dab75@u.h] changed
    File [kphp/dfs2.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs3.index.src_index389dab75@u.h] changed
    File [kphp/dfs3.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs4.index.src_index389dab75@u.h] changed
    File [kphp/dfs4.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs5.index.src_index389dab75@u.h] changed
    File [kphp/dfs5.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs6.index.src_index389dab75@u.h] changed
    File [kphp/dfs6.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs7.index.src_index389dab75@u.h] changed
    File [kphp/dfs7.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs8.index.src_index389dab75@u.h] changed
    File [kphp/dfs8.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs9.index.src_index389dab75@u.h] changed
    File [kphp/dfs9.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs10.index.src_index389dab75@u.h] changed
    File [kphp/dfs10.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs11.index.src_index389dab75@u.h] changed
    File [kphp/dfs11.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs12.index.src_index389dab75@u.h] changed
    File [kphp/dfs12.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs13.index.src_index389dab75@u.h] changed
    File [kphp/dfs13.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs14.index.src_index389dab75@u.h] changed
    File [kphp/dfs14.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs15.index.src_index389dab75@u.h] changed
    File [kphp/dfs15.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs16.index.src_index389dab75@u.h] changed
    File [kphp/dfs16.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs17.index.src_index389dab75@u.h] changed
    File [kphp/dfs17.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs18.index.src_index389dab75@u.h] changed
    File [kphp/dfs18.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs19.index.src_index389dab75@u.h] changed
    File [kphp/dfs19.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs20.index.src_index389dab75@u.h] changed
    File [kphp/dfs20.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs21.index.src_index389dab75@u.h] changed
    File [kphp/dfs21.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs22.index.src_index389dab75@u.h] changed
    File [kphp/dfs22.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs23.index.src_index389dab75@u.h] changed
    File [kphp/dfs23.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs24.index.src_index389dab75@u.h] changed
    File [kphp/dfs24.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs25.index.src_index389dab75@u.h] changed
    File [kphp/dfs25.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs26.index.src_index389dab75@u.h] changed
    File [kphp/dfs26.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs27.index.src_index389dab75@u.h] changed
    File [kphp/dfs27.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs28.index.src_index389dab75@u.h] changed
    File [kphp/dfs28.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs29.index.src_index389dab75@u.h] changed
    File [kphp/dfs29.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs30.index.src_index389dab75@u.h] changed
    File [kphp/dfs30.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs31.index.src_index389dab75@u.h] changed
    File [kphp/dfs31.index.src_index389dab75@u.cpp] changed
    File [kphp/dfs.index.src_index389dab75@u.h] changed
    File [kphp/dfs.index.src_index389dab75@u.cpp] changed
    File [kphp/vars0.cpp] changed
    File [kphp/vars.cpp] changed
    Ответ написан
    1 комментарий

Лучшие вопросы пользователя

Все вопросы (9)