laravel框架中你所用到的依賴(lài)注入詳解
前言
用Laravel開(kāi)發(fā)前前后后有2個(gè)月左右了,之前一直寫(xiě)Java,就像找到Java和PHP之前的共同點(diǎn),用Java的某些原理去理解PHP會(huì)發(fā)現(xiàn)還是有很多共通之處的。Java的依賴(lài)注入已經(jīng)是一個(gè)很常見(jiàn)的概念了,Spring框架主要就是解決了這一點(diǎn),在PHP的laravel框架中,也出現(xiàn)了依賴(lài)注入的方式。
依賴(lài)注入就控制反轉(zhuǎn)的一種是實(shí)現(xiàn)方式,面向?qū)ο蟮奶卣鞯闹匾w現(xiàn),那么依賴(lài)注入中什么是依賴(lài)呢,這點(diǎn)用Java開(kāi)發(fā)的人很多都能理解?;\統(tǒng)的說(shuō)依賴(lài)就是一種聯(lián)系,變量和實(shí)現(xiàn)的聯(lián)系。有關(guān)于依賴(lài)注入的理解之前寫(xiě)過(guò),傳送門(mén):http://www.dbjr.com.cn/article/143573.htm
接下來(lái)說(shuō)說(shuō)Laravel中的依賴(lài)注入。
之前就聽(tīng)說(shuō)Laravel的特點(diǎn)中依賴(lài)注入就是其中之一,一直在尋找依賴(lài)注入和Spring的感覺(jué)。
Laravel提供了多種依賴(lài)注入的方式。首先就將實(shí)現(xiàn)構(gòu)造器或者方法參數(shù)的注入,這種依賴(lài)注入的方式比較簡(jiǎn)單,也不需要怎么配置。只要在方法的參數(shù)中寫(xiě)入類(lèi)的類(lèi)型,這個(gè)時(shí)候,類(lèi)的實(shí)例就會(huì)注入到這個(gè)參數(shù)上,我們?cè)谑褂玫臅r(shí)候,就可以直接使用,而不用我們?cè)偃ew這個(gè)類(lèi)的實(shí)例,這個(gè)new的過(guò)程,已經(jīng)由框架替我們做了。
例如:
class Test { //這是一個(gè)類(lèi) } class TestController extend Controller { public function __contract(Test $test) { print_r($test); } }
這樣我們不用對(duì)$test變量做任何的賦值操作,Laravel會(huì)幫我們把Test的實(shí)例賦值給$test變量,這就是一種依賴(lài)注入的使用。我們的依賴(lài)的Test就這樣被注入到了參數(shù)里頭。我們平時(shí)使用Laravel的控制器中接收頁(yè)面參數(shù)的時(shí)候,就是依賴(lài)注入。
那么,我們?cè)贘ava中常用的一種面向接口編程的方式,Laravel框架也同樣提供了,這種面向接口編程的方式。這種方式很簡(jiǎn)單,首先我們的所有調(diào)用都是面向接口的。我們這里先寫(xiě)一個(gè)接口:
interface TestInterface { //接口的方法 }
定義好了接口,我們就要定義接口的實(shí)現(xiàn)類(lèi):
class TestService implements TestInterface { //實(shí)現(xiàn)的方法 }
如何將依賴(lài)完成呢?Laravel的實(shí)現(xiàn)很簡(jiǎn)單,通過(guò)一個(gè)方法可以將實(shí)現(xiàn)和接口綁定起來(lái)。我們?cè)贚aravel框架下找app/Providers/AppServiceProider.php這個(gè)文件,打開(kāi)之后他是長(zhǎng)這樣的:
class AppServiceProvider extends ServiceProvider { public function boot() { 35 } public function register() { // } }
在register方法下降接口綁定到實(shí)現(xiàn)上,在其中加入:
$this->app->bind( 'Interface\TestInterface', 'Service\TestService' );
這樣在方法的參數(shù)中,只要把接口寫(xiě)上,就可以注入依賴(lài)了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
一個(gè)經(jīng)典的PHP驗(yàn)證碼類(lèi)分享
這篇文章主要介紹了一個(gè)經(jīng)典的PHP驗(yàn)證碼類(lèi)分享,本文不僅提供了類(lèi)代碼,還提供了使用例子及表單中使用的方法,需要的朋友可以參考下2014-11-11PHP房貸計(jì)算器實(shí)例代碼,等額本息,等額本金
下面小編就為大家?guī)?lái)一篇PHP房貸計(jì)算器實(shí)例代碼,等額本息,等額本金。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記(一) - 抽象類(lèi)、對(duì)象接口、instanceof 和契約式編程
面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)是一種計(jì)算機(jī)編程架構(gòu)。OOP的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。2014-06-06php中serialize序列化與json性能測(cè)試的示例分析
本篇文章介紹了,在php中serialize序列化與json性能測(cè)試的示例分析。需要的朋友參考下2013-04-04Thinkphp 框架配置操作之配置加載與讀取配置實(shí)例分析
這篇文章主要介紹了Thinkphp 框架配置操作之配置加載與讀取配置,結(jié)合實(shí)例形式分析了Thinkphp 框架配置操作中配置加載原理、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-05-05在swoole中制作一款仿制laravel的框架的實(shí)例代碼
這篇文章主要介紹了在swoole中制作一款仿制laravel的框架,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03ThinkPHP實(shí)現(xiàn)支付寶接口功能實(shí)例
這篇文章主要介紹了ThinkPHP實(shí)現(xiàn)支付寶接口功能的方法,實(shí)例講述了支付寶接口的下載及二次開(kāi)發(fā)方法,以及對(duì)應(yīng)的ThinkPHP開(kāi)發(fā)技巧,需要的朋友可以參考下2014-12-12