代码之家  ›  专栏  ›  技术社区  ›  koen

闭包如何帮助创建DSL/Fluent接口:PHP示例?

  •  4
  • koen  · 技术社区  · 15 年前

    你能给我一个用PHP的例子,说明闭包如何有助于创建DSL(Fluent接口)吗?

    编辑: 下面问题中接受的答案说明了嵌套闭包。如果有人能把这个例子翻译成PHP,那也会有帮助: Experience with fluent interfaces? I need your opinion!

    1 回复  |  直到 13 年前
        1
  •  1
  •   El Barto    13 年前

    这是我能想到的第一个例子,不太好,但它给了你一个想法:

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

    在那里,我将使用Fluent接口使用一些ORM查询数据库,然后对我得到的记录集应用一些过滤器。想象一下 run() 方法返回一个记录集对象,该对象具有 filter() 方法可以是这样的:

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

    你明白吗?