Php Laravel-服务提供商-绑定多个类

Php Laravel-服务提供商-绑定多个类,php,laravel,laravel-5,Php,Laravel,Laravel 5,我知道如何绑定单个类: public function register() { $this->app->bind('search', 'Laracasts\Search\Search'); } 但想象一下,我的Laracasts\Search\dir拥有以下文件: Search.php//类搜索 SearchX.php//classsearchx SearchY.php//class SearchY SearchZ.php//classsearchz 将这四个文件/类

我知道如何绑定单个类:

public function register() {
    $this->app->bind('search', 'Laracasts\Search\Search');
}
但想象一下,我的
Laracasts\Search\
dir拥有以下文件:

  • Search.php//类搜索
  • SearchX.php//classsearchx
  • SearchY.php//class SearchY
  • SearchZ.php//classsearchz
将这四个文件/类绑定到搜索facade中的最佳方法是什么


我在另一篇文章中读到,我们可以使用地图绘制器。但是如何实现呢?

为每个类/外观使用单独的绑定:

public function register() {
    $this->app->bind('search.x', 'Laracasts\Search\SearchX');
    $this->app->bind('search.y', 'Laracasts\Search\SearchY');
    ...
}
绑定只能绑定到一个对象。当然,在绑定类中,您可以做任何您喜欢的事情:

public function register() {
    $this->app->bind('search.all', 'Laracasts\Search\SearchAll');
}

class SearchAll() {

    private $searchers = []; // an array of searchers

    // Use Laravel Dependency Injection to instantiate our searcher classes
    public function __construct(SearchX $searchX, SearchY $searchY) {
        $this->searchers = [$searchX, $searchY];
    }

    public function search($value) {
        $matches = [];
        foreach ($this->searchers() as $searcher) {
            $matches += $searchers->search();
        }
        return $matches;
    }
}

// elsewhere in your app...
$searcher = app('search.all');
$matches = $searcher->search('hello');