溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP的架構(gòu)及原理是什么

發(fā)布時(shí)間:2021-07-10 10:29:12 來(lái)源:億速云 閱讀:124 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“PHP的架構(gòu)及原理是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“PHP的架構(gòu)及原理是什么”吧!

PHP 的特點(diǎn)


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


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


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


其他
Zend 引擎 + Ext 擴(kuò)展 的模式降低了內(nèi)部耦合,可以方便的為PHP本身增加功能和去除功能。
語(yǔ)法簡(jiǎn)單,沒(méi)有太多強(qiáng)制規(guī)范,編程風(fēng)格上既可以用過(guò)程式、也可以用面向?qū)ο蟮姆绞竭M(jìn)行開(kāi)發(fā),當(dāng)然函數(shù)式也可以。


PHP 的架構(gòu)

PHP的架構(gòu)及原理是什么


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


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

  1. 詞法分析 Scanning(Lexing),將 PHP 代碼轉(zhuǎn)換為語(yǔ)言片段(Tokens)。

  2. 解析 Parsing, 將 Tokens 轉(zhuǎn)換成簡(jiǎn)單而有意義的表達(dá)式。

  3. 編譯 Compilation,將表達(dá)式編譯成Opcode。

  4. 執(zhí)行 Execution,順序執(zhí)行Opcode,每次一條,以實(shí)現(xiàn)PHP代碼所表達(dá)的功能。

APC、Opchche 這些擴(kuò)展可以將Opcode緩存以加速PHP應(yīng)用的運(yùn)行速度,使用它們就可以在請(qǐng)求再次來(lái)臨時(shí)省略前三步。
引擎也實(shí)現(xiàn)了基本的數(shù)據(jù)結(jié)構(gòu)、內(nèi)存分配及管理,提供了相應(yīng)的API方法供外部調(diào)用。


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


SAPI
SAPI 是 Server Application Programming Interface 的縮寫,中文為服務(wù)端應(yīng)用編程接口,它通過(guò)一系列鉤子函數(shù)使得PHP可以和外圍交換數(shù)據(jù),SAPI 就是 PHP 和外部環(huán)境的代理器,它把外部環(huán)境抽象后,為內(nèi)部的PHP提供一套固定的,統(tǒng)一的接口,使得 PHP 自身實(shí)現(xiàn)能夠不受錯(cuò)綜復(fù)雜的外部環(huán)境影響,保持一定的獨(dú)立性。
通過(guò) SAPI 的解耦,PHP 可以不再考慮如何針對(duì)不同應(yīng)用進(jìn)行兼容,而應(yīng)用本身也可以針對(duì)自己的特點(diǎn)實(shí)現(xiàn)不同的處理方式。


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


總結(jié)
當(dāng)你理解這些后你就會(huì)理解為什么PHP的創(chuàng)始人會(huì)說(shuō)PHP開(kāi)發(fā)其實(shí)是不需要框架的,因?yàn)镻HP的設(shè)計(jì)本身就是一個(gè)類似框架的東西,如果用汽車比喻的話PHP本身就是就是車的骨架,Zend的是引擎,Ext是輪子,方向盤等車的組件,SAPI 就是路。

到此,相信大家對(duì)“PHP的架構(gòu)及原理是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI