<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 概念 `register`方法用于綁定接口和實現,初始化配置等,在這個函數中不能保證其它服務已經完全加載完畢,因此只能用于注冊相關的工作,不能調用其它服務,而`boot`調用的時候,所有的服務都已經注冊完畢,可以放心的使用Laravel中注冊的對象,可以調用其它服務 首先我們在項目中搜索關鍵字ServiceProvider,會出現很多服務提供者.我們來看這個代碼 主要搜索register這個方法,他里面注冊了2個方法 我們看這個方法registerNativeFilesystem,這里面代碼就是把Filesystem這個對象綁定到files這個關鍵字中,這個關鍵字可以理解一個key,可以用app()這個幫助函數來實現 app()這個幫助函數在入口文件index.php中 `$app = require_once __DIR__.'/../bootstrap/app.php';` 我們看Filesystem這個類中有get這個方法來獲取文件內容,我們來用下個這功能 在路由中寫 ~~~ Route::get('/pro',function (){ //make里面是之前綁定的關鍵字,調用get這個方法來獲取Kernel.php這個文件內容 dd(app()->make('files')->get(__DIR__.'/Kernel.php')); }); ~~~ `app()->make('files')` 也可以寫成app(files)或者 `app()['files']` app這個在helpers.php這個文件中,如果傳入參數會實例化對應的類,如果沒有傳遞參數,會返回入口文件中 `$app = require_once __DIR__.'/../bootstrap/app.php` 這個 上面我們可以用app()來實例化,我們也可以自己new,但是自己new不好,如果我們new的同時有參數傳遞,可以在register綁定的那個方法中new來傳遞參數 我們再看個例子 ~~~ class bar{} App::bind('Foo',function(){ return new bar(); }); Route::get('/pro',function (){ //make里面是之前綁定的關鍵字,調用get這個方法來獲取Kernel.php這個文件內容 dd(app('Foo')); }); ~~~ ## 向IOC容器中添加自己的類 我們在app這個文件夾下新建一個Biling這個文件夾,里面寫Stripe.php,編輯 ~~~ namespace App\Biling; class Stripe { public function charge() { dd('charge'); } } ~~~ 我們想把這個類放到服務容器里面,我們可以創建一個服務容器php artisan make:provider BilingServerProvider 會創建到App\Providers這個文件夾下面,在對應文件里面我們可以看到一個非常熟悉的方法,這個方法和上面講的register一樣 ~~~ public function register() { $this->app->bind('biling',function (){ //寫對應的namespace return new Stripe(); }); } ~~~ 這個時候我們有服務提供者了,但是我們還用不了,我們要在服務容器中讓他知道他存在 我們再config/app.php中那個數組中添加App\Providers\BilingServerProvider::class,接下來我們就可以使用這個了.在路由中寫 ~~~ Route::get('pro',function(){ $biling=app('biling'); dd($biling->charge()); }); ~~~ 當然你也可以寫依賴注入 ~~~ Route::get('pro',function(\App\Biling\Stripe $stripe){ dd($stripe->charge()); }); ~~~ 單例 ~~~ $this->app->singleton('HelpSpot\API', function ($app) { return new HelpSpot\API($app->make('HttpClient')); }); ~~~ 綁定接口到實現 服務容器有一個很強大的功能,就是支持綁定接口到給定的實現。例如,如果我們有個`EventPusher`接口 和一個`RedisEventPusher`實現。一旦我們寫完了`EventPusher`接口的`RedisEventPusher`實現,我們就可以在服務容器中注冊它,像這樣: ~~~php $this->app->bind( 'App\Contracts\EventPusher', 'App\Services\RedisEventPusher' ); ~~~ 這么做相當于告訴容器:當一個類需要實現`EventPusher`時,應該注入`RedisEventPusher`。現在我們就可以在構造函數或者任何其他通過服務容器注入依賴項的地方使用類型提示注入`EventPusher`接口
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看