一.php語言特色及發展示狀php
1.服務端腳本語言,自由度太大 ,一個業務邏輯可言寫在模型裏,控制器裏,也能夠單獨封裝成一個類,甚至能夠嵌入到html裏,這樣勢必會形成混亂,業務邏輯散落在各處,尤爲對於大型系統。除非有一個強制性的約定,對於靜態語言,好比java能夠在編譯的時候來進行檢驗,可是解釋性的語言則否則。html
2.PHP是弱類型語言。對於弱類型有的說是優勢有的說是缺點,php中的變量能夠不事先說明就能夠賦值使用,而且能夠動態改變它的類型和值並且在這過程當中不會報任何錯誤。看起來獲得了方便,可是也失去了條理性和安全性,在小項目中很靈活很方便,可是在大型項目中得不償失。java
3.面向對象和麪向過程共存,一個應用生命週期能夠所有用面向過程也能夠所有用面向對象去寫,這種狀況在項目整合過程當中會出現沒法整合的狀況,或者須要巨大的代價甚至重構。laravel
4.代碼碎片化,魔術方法調用不少。web
laravel是爲了提升php大型開發效率而生,同時也提升了應用的健壯性,可維護性。設計模式
組件化開發,不必造輪子,好比laravel裏面核心代碼也是用到部分symfony的代碼。緩存
框架的一些核心也是組件的方式php框架
二.laravel框架介紹安全
Laravel框架優勢:框架
1.包含更多的功能,好比隊列,搜索,數據遷移,定時腳本。
2.經過Composer使用了豐富的第三方包。
3.設計思想先進,引入了門面,依賴注入,Ioc模式,等設計模式,擴展性很強。好比laravel框架中全部使用的服務功能,是由服務提供者存放到IOC容器中,當具體使用哪些服務時候,則直接從容器中獲取就行,這樣分離了服務提供者和使用者,服務使用者不須要關心服務是誰提供的,這樣就實現瞭解耦,當替換服務等時候就很是方便了。
4.社區活躍。
5.基於Laravel開源項目多。
Laravel技術特性:
Laravel擁有一個很是簡單的核心。
項目目錄很是簡單,以下圖
container類是負責組裝調度各類組建服務的容器,和web沒有什麼關係,會將各類功能合理的組裝在一塊兒,最終構成了一個大型的功能齊全的web框架。
儘管核心很是簡單,可是實現仍是比較複雜的,並足以支撐大型的應用。
這些服務最終構成全站的功能。若是須要能夠添加自定義服務或者第三方的包並註冊進去就能夠自動加載。
每一個功能能夠理解成一個服務service。好比視圖渲染,路由請求攔截,權限驗證,緩存。對於不少php框架這些功能都是框架核內心提供的功能,固化在框架中,但對於laravel框架它們是獨立的模塊。經過提供器(provide)來把這些service註冊到laravel核心容器(container)中,最終構成一個強大web體系。
三.laravel核心概念
1.服務容器(Container)。
容器的概念就如同其名字同樣,容器就是用來盛裝東西的,咱們能夠往容器裏存放東西,也能夠提取東西,而在Laravel中容器存放的是一個個實例的對象或者服務,Laravel 的核心就是一個 IoC 容器。
爲何要使用容器?
這裏要提到控制反轉Ioc(Inversion of Control)和DI(依賴注入),這是一種面向對象的設計思想,可讓咱們設計出鬆耦合、更優良的程序。
一個系統在沒有引入控制反轉的時候,就如上圖所示,對象Object A當依賴於對象Object B的時候,就須要去new一下Object B,而當須要Object C的時候又得在代碼裏去new一下Object C。
中間有個Ioc容器,對象Object B在初始化時候往Ioc容器中注入本身一個實例,當對象Object A須要使用對象Object B提供的相應功能時候,並不須要new一下對象Object B,而是在Ioc容器中之間取出對象Object B的實例。這樣就實現了Object A與Object B之間的解耦。
通常控制反轉須要結合依賴注入來作,依賴注入是將一個實例變量傳入到對象中去,Laravel的依賴注入是利用反射(Reflection)來完成的。
2.服務提供者。
Laravel中的容器有綁定和解析的過程,綁定通常是由服務提供者來實現,一旦一個服務提供者被註冊了,那麼就能夠被提供服務,服務提供者都繼承serviceProvider這個類,這個類包含兩個方法boot 和 register 方法,在實現自定義服務提供者時大部分都是在處理這兩個方法。
咱們能夠將綁定的過程寫在這兩個方法裏,那麼這兩個方法有什麼區別呢?
register 方法用於執行服務綁定處理。另外在 boot 方法中可使用全部已綁定的服務。
3.Facades。
4.Contracts(契約)
四.laravel核心功能
1.隊列
laravel隊列服務爲各類後臺隊列提供了統一的Api,容許延遲比較耗時的任務(例如郵件發送)的執行,從而提升系統響應速度。支持隊列失敗重啓功能。
2.中間件
3.搜索模塊