<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                我們先來看一段代碼 ~~~ class Foo{} Route::get('/foo',function(Foo $foo){ dd($foo); }); ~~~ 上面代碼會執行$foo=new Foo();這是laravel幫我們實現的!上面也是形參的依賴注入 我們再來看這一段代碼 ~~~ class Bar{} class Foo{} App::bind('Foo',function(){ dd('called here'); }); Route::get('bind',function(Foo $foo){ dd($foo); }); ~~~ 瀏覽這個路由會出現called here原因是在于,laravel會先尋找你有沒有綁定這個類,沒有的話會幫你new這個類,類里面的依賴也會幫你new # 綁定 綁定操作一般在ServiceProviders中的register方法中,最基本的綁定是容器的bind方法,它接受一個類的別名或者全名和一個閉包來獲取實例: ~~~ $this->app->bind('XblogConfig', function ($app) { return new MapRepository(); }); ~~~ 還有一個singleton方法,和bind寫法沒什么區別。你也可以綁定一個已經存在的對象到容器中,上文中提到的request實例就是通過這種方法綁定到容器的:$this->app->instance('request', $request);。綁定之后,我們可以通過一下幾種方式來獲取綁定實例: ~~~ 1. app('XblogConfig'); 2. app()->make('XblogConfig'); 3. app()['XblogConfig']; 4. resolve('XblogConfig'); ~~~ 以上四種方法均會返回獲得MapRepository的實例,唯一的區別是,在一次請求的生命周期中,bind方法的閉包會在每一次調用以上四種方法時執行,singleton方法的閉包只會執行一次。在使用中,如果每一個類要獲的不同的實例,或者需要“個性化”的實例時,這時我們需要用bind方法以免這次的使用對下次的使用造成影響;如果實例化一個類比較耗時或者類的方法不依賴該生成的上下文,那么我們可以使用singleton方法綁定。singleton方法綁定的好處就是,如果在一次請求中我們多次使用某個類,那么只生成該類的一個實例將節省時間和空間。 你也可以綁定接口與實現,例如: ~~~ $app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class ); ~~~ 上文講述的Laravel的生命周期的第二步,Laravel默認(在bootstrap\app.php文件中)綁定了Illuminate\Contracts\Http\Kernel,Illuminate\Contracts\Console\Kernel,Illuminate\Contracts\Debug\ExceptionHandler接口的實現類,這些是實現類框架的默認自帶的。但是你仍然可以自己去實現。 還有一種上下文綁定,就是相同的接口,在不同的類中可以自動獲取不同的實現,例如: ~~~ $this->app->when(PhotoController::class) ->needs(Filesystem::class) ->give(function () { return Storage::disk('local'); }); $this->app->when([VideoController::class, UploadController::class]) ->needs(Filesystem::class) ->give(function () { return Storage::disk('s3'); }); ~~~ 上述表明,同樣的接口Filesystem,使用依賴注入時,在PhotoController中獲取的是local存儲而在VideoController中獲取的是s3存儲。 <br> 平常使用 ~~~ app()->make(自己定義的完全命名空間+類); ~~~ 他就能解析出來,即使你定義的類依賴其他你定義的類,沒關系,會遞歸反射解決依賴的,但是如果存在循環依賴的話,會直接爆棧內存,laravel沒有做循環依賴的檢查
                  <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>

                              哎呀哎呀视频在线观看