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