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

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

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

1 Ответ

1 голос
/ 22 февраля 2012

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

$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);
}

Вам понятна идея?

...