摘要:判斷是否存在構(gòu)造函數(shù),不存在直接實例化,存在則通過來獲取輸入函數(shù),并有相應(yīng)的方法解決依賴參數(shù)問題,實現(xiàn)依賴注入。
Laravel 框架關(guān)鍵技術(shù)解析·讀書筆記(一)
入口文件
請求訪問的入口文件,主要完成幾部分工作,分別是:
自動加載函數(shù)的添加
服務(wù)器實例化與服務(wù)注冊
路由加載
請求實例化與路由分發(fā)
相應(yīng)生成與發(fā)送
其中,自動加載函數(shù)用于包含引用文件,改文件是composer工具自動生成的,直接require關(guān)鍵字添加即可。
在Laravel框架中一些功能的生成都需要服務(wù)容器實現(xiàn),即IlluminateContainerContainer類的實例,服務(wù)容器用于服務(wù)注冊和解析,也就是說向服務(wù)容器注冊能夠?qū)崿F(xiàn)某些功能的實例或者回調(diào)函數(shù),當需要使用該功能時從服務(wù)容器中獲取相應(yīng)的實例來完成。
訪問網(wǎng)站的根目錄,服務(wù)器會調(diào)用入口文件進行處理,入口文件會通過IlluminateHttpRequest類的靜態(tài)方法createFormGlobals()實現(xiàn)請求的實例化,然后通過路由進行分發(fā)處理,路由會根據(jù)請求的地址查找路由表,查找到將通過路由表中對應(yīng)的相應(yīng)處理方式進行處理并返回響應(yīng)。
模型組件
Illuminatedatabase 組件主要用于操作數(shù)據(jù)庫,他提供了兩種數(shù)據(jù)庫的方式,一種是查詢構(gòu)造器方式,一種是Eloqument ORM 方式
通過Eloquent ORM 方式操作數(shù)據(jù)庫需要以下工作
創(chuàng)建數(shù)據(jù)庫
添加數(shù)據(jù)庫配置信息
啟動Eloquent ORM模塊
創(chuàng)建model類
通過model類操作數(shù)據(jù)庫
啟動Eloquent ORM 模塊階段需要用到數(shù)據(jù)庫的管理類,即IlluminateDatabaseCapsuleManager 類,需要相應(yīng)初始化,以及數(shù)據(jù)庫相關(guān)配置,以完成數(shù)據(jù)庫Eloquent ORM 模塊的啟動。
組件開發(fā)語法條件
命名空間
文件包含
通過composer工具創(chuàng)建依賴管理時,會在vendor目錄下創(chuàng)建一個autoload.php文件和一個composer文件夾,其中composer文件夾中包含了類自動加載函數(shù)注冊的相關(guān)實現(xiàn),而autoload.php文件是對外的接口,通過包含該文件就可以完成類自動加載函數(shù)的注冊。
【相應(yīng)問題看源碼,沒能夠有很理解,停留層次較淺】
匿名函數(shù)
特殊語法
魔術(shù)方法
魔術(shù)常量
反射
主要用來動態(tài)的獲取系統(tǒng)中的類、實例對象、方法等語言結(jié)構(gòu)的信息,通過反射API函數(shù)可以實現(xiàn)對這些語言構(gòu)件信息的動態(tài)獲取和動態(tài)操作等(PHP5具有完整的反射API,添加了對類、接口、函數(shù)、方法和擴展進行反向工作的能力)
在laravel框架中,服務(wù)容器解析服務(wù)的過程中就用到了反射機制
##文件 : IlluminateContainerContainer.php
在Laravel框架中,解析服務(wù)是通過build()函數(shù)實現(xiàn),一般分為兩種情況:一種是查找對應(yīng)的服務(wù)是否被服務(wù)提供者注冊為實例或者提供服務(wù)的匿名函數(shù),如果是,則直接進行服務(wù)解析;第二種是服務(wù)名稱沒有響應(yīng)的服務(wù)綁定,通過反射機制來動態(tài)創(chuàng)建服務(wù)。通過反射機制動態(tài)創(chuàng)建服務(wù)的過程可以分為兩個步驟:第一步是通過放射機制獲取服務(wù)類構(gòu)造函數(shù)的信息,第二步是解決服務(wù)類構(gòu)造函數(shù)的依賴問題?!九袛嗍欠翊嬖跇?gòu)造函數(shù),不存在直接實例化,存在則通過getParameters()來獲取輸入函數(shù),并有相應(yīng)的方法解決依賴參數(shù)問題,實現(xiàn)依賴注入?!?/p>
后期靜態(tài)綁定
同樣的相關(guān)介紹,在《深入PHP:面向?qū)ο?、模式與實踐》中也有相關(guān)介紹,增加了一個后期延遲靜態(tài)綁定的功能,用于繼承范圍引用靜態(tài)調(diào)用的類
在類的繼承過程中,使用的類不再是當前類,而是調(diào)用的類,后期靜態(tài)延遲綁定使用關(guān)鍵字static來實現(xiàn),通過這種機制,“static::”不再解析未定義當前方法所在的類,而是在實際運行時計算得到的。即為運行時最初調(diào)用的類。
后期延遲綁定還可以用于對象實例中。在對象實例化中static會根據(jù)運行時調(diào)用的類來決定實例化對象,而self是根據(jù)所在位置的類來決定實例化對象【更多實例,參見IlluminateEloquentModel類的代碼,該類中使用了大量的后期靜態(tài)綁定】
新特性
trait
單繼承語言解決多繼承問題方式(Ruby中通過混入類Mixin的方法解決)
通過use 關(guān)鍵字添加到其他類的內(nèi)部,增加了水平的特性的組合。
trait的一些特質(zhì)
優(yōu)先級:當前類的方式會覆蓋trait中的方法,而trait中的方法會覆蓋積累的方法
多個trait組合,通過逗號分隔
沖突解決:結(jié)局多個trait中插入了相同的方法,若沒有明確解決沖突將會產(chǎn)生一個致命錯誤,解決該沖突,需要使用insteadof操作符來明確指定使用沖突方法中的哪一個,同時可以使用as操作符將其中一個沖突的方法以另一個名字來引入。
修改方法的訪問控制:使用as語法調(diào)整方法的訪問控制
trait的抽象方法:在trait中可以使用抽象成員
trait的靜態(tài)成員:可以使用靜態(tài)方法、靜態(tài)變量
trait的屬性定義:可以定義屬性
簡化三元運算符
$var = (expr1)?(expr2):(expr3);
從PHP5.3起,可以省略三元運算符的中間部分 $var = expr1 ? :expr3
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28667.html
摘要:框架關(guān)鍵技術(shù)解析讀書筆記二第五章框架應(yīng)用程序根目錄版本默認的框架應(yīng)用程序是符合規(guī)范的,所以相應(yīng)的目錄結(jié)構(gòu)也是基本固定的,不同的目錄加載了功能文件,如果添加了新的目錄,需要在文件中添加規(guī)范的自動加載部分并執(zhí)行命令。 Laravel 框架關(guān)鍵技術(shù)解析·讀書筆記(二) 第五章 框架應(yīng)用程序根目錄(5.1版本) 默認的Laravel框架應(yīng)用程序是符合PSR規(guī)范的,所以相應(yīng)的目錄結(jié)構(gòu)也是基本...
摘要:裝飾者模式是在開放關(guān)閉原則下實現(xiàn)動態(tài)添加或減少功能提高程序的擴展性詳細介紹注本文可以作為學習裝飾者模式的基礎(chǔ)篇但是我個人更建議配套裝飾者模式來學習效果更佳本文中的例子是由框架關(guān)鍵技術(shù)解析中摘抄的。 裝飾者模式:是在開放-關(guān)閉原則下實現(xiàn)動態(tài)添加或減少功能,提高程序的擴展性.詳細介紹注: 本文可以作為學習裝飾者模式的基礎(chǔ)篇,但是我個人更建議配套Decorator Pattern With...
摘要:劃下重點,服務(wù)容器是用于管理類的依賴和執(zhí)行依賴注入的工具。類的實例化及其依賴的注入,完全由服務(wù)容器自動的去完成。 本文首發(fā)于 深入剖析 Laravel 服務(wù)容器,轉(zhuǎn)載請注明出處。喜歡的朋友不要吝嗇你們的贊同,謝謝。 之前在 深度挖掘 Laravel 生命周期 一文中,我們有去探究 Laravel 究竟是如何接收 HTTP 請求,又是如何生成響應(yīng)并最終呈現(xiàn)給用戶的工作原理。 本章將帶領(lǐng)大...
摘要:源碼解析這個類的源碼主要就是文件的操作和文件屬性的操作,而具體的操作是通過每一個實現(xiàn)的,看其構(gòu)造函數(shù)看以上代碼知道對于操作,實際上是通過的實例來實現(xiàn)的??梢钥聪碌氖褂蒙衔囊呀?jīng)說了,使得對各種的操作變得更方便了,不管是還是得。 說明:本文主要學習下LeagueFlysystem這個Filesystem Abstract Layer,學習下這個package的設(shè)計思想和編碼技巧,把自己的一...
摘要:大家有好的文章可以在評論下面分享出來共同進步本文鏈接數(shù)組使用之道程序員進階學習書籍參考指南教你在不使用框架的情況下也能寫出現(xiàn)代化代碼巧用數(shù)組函數(shù)框架中間件實現(xiàn)沒錯,這就是面向?qū)ο缶幊淘O(shè)計模式需要遵循的個基本原則令人困惑的在中使用協(xié)程實現(xiàn)多任 大家有好的文章,可以在評論下面分享出來, 共同進步! 本文github鏈接 php PHP 數(shù)組使用之道 PHP程序員進階學習書籍參考指南 教你...
閱讀 909·2021-11-15 11:38
閱讀 2555·2021-09-08 09:45
閱讀 2864·2021-09-04 16:48
閱讀 2599·2019-08-30 15:54
閱讀 960·2019-08-30 13:57
閱讀 1656·2019-08-29 15:39
閱讀 530·2019-08-29 12:46
閱讀 3554·2019-08-26 13:39