PHP的架構(gòu)及原理描述-創(chuàng)新互聯(lián)

記得我剛開始學(xué)習(xí)PHP的時候,許多面試官會經(jīng)常問我PHP是什么,那時的標(biāo)準(zhǔn)回答是PHP是一種弱類型動態(tài)腳本編程語言,開源,免費,是超文本預(yù)處理器的縮寫。

成都創(chuàng)新互聯(lián)服務(wù)項目包括涇縣網(wǎng)站建設(shè)、涇縣網(wǎng)站制作、涇縣網(wǎng)頁制作以及涇縣網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,涇縣網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到?jīng)芸h省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

這只是很淺的解釋,PHP對我來說是一個工具,是我手里的一把錘子,雖然這把錘子時常被調(diào)侃為兩邊都是起釘器的錘子。

1.PHP是什么

PHP即“超文本預(yù)處理器”,是一種通用開源腳本語言。PHP是在服務(wù)器端執(zhí)行的腳本語言,與C語言類似,是常用的網(wǎng)站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創(chuàng)的語法。利于學(xué)習(xí),使用廣泛,主要適用于Web開發(fā)領(lǐng)域。

2.多進(jìn)程模型

PHP是以多進(jìn)程模型設(shè)計的,這樣的好處是請求之間互不干涉,一個請求失敗也不會對其他進(jìn)程造成影響,作為最開始僅僅用于個人網(wǎng)站的一個工具集這樣的設(shè)計并沒有什么不妥,隨著PHP的應(yīng)用變大,訪問量增加這種方式顯然是不合適的,因為啟動一個進(jìn)程的開銷對于海量請求是不劃算的,所以現(xiàn)在PHP基本都是運行在PHP-FPM的管理下的,這是一個PHP進(jìn)程管理器,它常駐內(nèi)存啟動一些PHP進(jìn)程待命,當(dāng)請求進(jìn)入時分配一個進(jìn)程進(jìn)行處理,PHP進(jìn)程處理完畢后回收進(jìn)程,但并不銷毀進(jìn)程,這讓PHP也能應(yīng)對高流量的訪問請求。

當(dāng)然現(xiàn)在也有PHP多線程的解決方案和基于協(xié)程的解決方案讓PHP更高效的處理WEB請求。

3.弱類型

與 JAVA、C/C++ 不同,PHP是一門若類型的語言,變量在聲明的那一刻是不需要確定它的類型的,而在運行時類型也會發(fā)生顯式或隱式的類型改變,這也是PHP開發(fā)應(yīng)用迅速、方便的原因之一。

PHP的架構(gòu)及原理描述

4.其他

Zend 引擎 + Ext 擴(kuò)展 的模式降低了內(nèi)部耦合,可以方便的為PHP本身增加功能和去除功能。

語法簡單,沒有太多強(qiáng)制規(guī)范,編程風(fēng)格上既可以用過程式、也可以用面向?qū)ο蟮姆绞竭M(jìn)行開發(fā),當(dāng)然函數(shù)式也可以。

以目前的 PHP 主流版本 PHP7 和 PHP5 來說架構(gòu)是如上圖所示,主要有四層體系構(gòu)成,從下到上依次是 Zend 引擎、Extensions 擴(kuò)展、SAPI 接口、上層應(yīng)用。

5.Zend 引擎

Zend 引擎是 PHP4 以后加入 PHP 的,是對原有PHP解釋器的重寫,整體使用 C 語言進(jìn)行開發(fā),也就是說可以把PHP理解成用C寫的一個編程語言軟件,引擎的作用是將PHP代碼翻譯為一種叫opcode的中間語言,它類似于JAVA的ByteCode(字節(jié)碼)。

引擎對PHP代碼會執(zhí)行四個步驟:

詞法分析 Scanning(Lexing),將 PHP 代碼轉(zhuǎn)換為語言片段(Tokens)。解析 Parsing, 將 Tokens 轉(zhuǎn)換成簡單而有意義的表達(dá)式。編譯 Compilation,將表達(dá)式編譯成Opcode。執(zhí)行 Execution,順序執(zhí)行Opcode,每次一條,以實現(xiàn)PHP代碼所表達(dá)的功能。

APC、Opchche 這些擴(kuò)展可以將Opcode緩存以加速PHP應(yīng)用的運行速度,使用它們就可以在請求再次來臨時省略前三步。

引擎也實現(xiàn)了基本的數(shù)據(jù)結(jié)構(gòu)、內(nèi)存分配及管理,提供了相應(yīng)的API方法供外部調(diào)用。

6.Extensions 擴(kuò)展

常見的內(nèi)置函數(shù)、標(biāo)準(zhǔn)庫都是通過extension來實現(xiàn)的,這些叫做PHP的核心擴(kuò)展,用戶也可以根據(jù)自己的要求安裝PHP的擴(kuò)展。

7.SAPI

SAPI 是 Server Application Programming Interface 的縮寫,中文為服務(wù)端應(yīng)用編程接口,它通過一系列鉤子函數(shù)使得PHP可以和外圍交換數(shù)據(jù),SAPI 就是 PHP 和外部環(huán)境的代理器,它把外部環(huán)境抽象后,為內(nèi)部的PHP提供一套固定的,統(tǒng)一的接口,使得 PHP 自身實現(xiàn)能夠不受錯綜復(fù)雜的外部環(huán)境影響,保持一定的獨立性。

通過 SAPI 的解耦,PHP 可以不再考慮如何針對不同應(yīng)用進(jìn)行兼容,而應(yīng)用本身也可以針對自己的特點實現(xiàn)不同的處理方式。

8.上層應(yīng)用

程序員編寫的PHP程序,無論是 Web 應(yīng)用還是 Cli 方式運行的應(yīng)用都是上層應(yīng)用,PHP 程序員主要工作就是編寫它們。

總結(jié)

這些東西如果你學(xué)習(xí)過 android 開發(fā)理解起來顯然更容易,因為android的架構(gòu)和PHP的這種架構(gòu)看起來很相似。當(dāng)你理解這些后你就會理解為什么PHP的創(chuàng)始人會說PHP開發(fā)其實是不需要框架的,因為PHP的設(shè)計本身就是一個類似框架的東西,如果用汽車比喻的話PHP本身就是就是車的骨架,Zend的是引擎,Ext是輪子,方向盤等車的組件,SAPI 就是路。

以上就是PHP的架構(gòu)及原理描述的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司其它相關(guān)文章!

名稱欄目:PHP的架構(gòu)及原理描述-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://muchs.cn/article36/ceegpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)網(wǎng)站制作、面包屑導(dǎo)航用戶體驗、App開發(fā)、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名