@magary4

Что значит передача интерфейса в качестве параметра?

Уже не первый раз встречаю код типа
public function save(ModelInterface $model)
    {
        $modelName = $this->getModelName();
        $modelEvent = new ModelEvent($model);
        . . .

https://github.com/orocommerce/orocommerce/blob/ma...

что это делается таким образом?

на сколько я знаю если я пишу какой-то умный класс который используется в какой-то системе, то я определяю интерфейс и если кто-то зачохет использовать свой вместо него - он просто реализовывывает его.
но в этом коде я подозреваю другую идею
  • Вопрос задан
  • 1722 просмотра
Решения вопроса 2
erniesto77
@erniesto77
oop, rb, py, php, js
что то вроде этого... если интерфейс в параметре, то мы можем туда передать любой экземпляр класса имплементирующий указанный интерфейс.
interface Berry {
    public function getSugar() {};
}
 
class Strawberries implements Berry {
    public function getSugar() {
        return 20;
    }
}
 
class Watermelon implements Berry {
    public function getSugar() {
        return 50;
    }
}
 
class Omnomnom() {
 
    public function printBerrySugar(Berry $berry) {
        return print($berry->getSugar());
    }
    
    public function test() {
        $this->printBerrySugar(new Strawberries ());
        $this->printBerrySugar(new Watermelon ());
    }
}
Ответ написан
Комментировать
27cm
@27cm
TODO: Написать статус
Метод сохраняет модель, то есть объект класса реализующего интерфейс ModelInterface. При этом срабатывают определённые события (model.save.before и model.save.after), обработчикам которых может потребоваться доступ к сохраняемому объекту ($model). Этот доступ можно получить через расшариваемый объект класса ModelEvent, который внутри себя и содержит объект $model.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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