Как замыкания помогают в создании интерфейса DSL/fluent: примеры PHP?

Можете ли вы привести пример на PHP, который показывает, как замыкания полезны при создании DSL (свободный интерфейс)?

редактировать: принятый ответ в следующем вопросе говорит о вложенных замыканиях. Если бы кто-то мог перевести этот пример на PHP, это тоже было бы полезно: опыт работы с свободно используемыми интерфейсами? Мне нужно ваше мнение!

1 ответ

Решение

Это первый пример, который я могу придумать, он не очень хорош, но дает вам представление:

$db = new Database();
$filteredList = $db->select()
           ->from('my_table')
           ->where('id', 9)
           ->run()
           ->filter(function($record){
            // apply some php code to filter records
        });

Там я буду использовать свободные интерфейсы для запросов к моей базе данных с использованием некоторого ORM, а затем применять некоторый фильтр к полученному набору записей. Представь run() Метод возвращает объект RecordSet, который имеет filter() метод, который может быть что-то вроде этого:

public function filter ($callback)
{
    return array_filter($this->recordSet, $callback);
}

Вы поняли идею?

Другие вопросы по тегам