欧美成人亚洲综合在线-91麻豆果冻精品一区二区三区-欧美性生活视频69-中国一级毛片视频免费看-欧洲精品一区二区三区中文字幕-国产精品剧情在线第一页-精品丰满熟女一区二区三区蜜桃-人妻日韩精品中文字幕-亚洲中文字幕五月婷婷

新聞

PHP底層的運(yùn)行機(jī)制與原理

發(fā)布時間

2019-08-03

來源

來自先知社區(qū)

移動

手機(jī)閱覽

0x01 前言

最近寫PHP代碼比較多,也算不上什么精通,感覺要使用php就得知道這門語言的底層原理,這里決定了解一下PHP底層的工作原理。


0x02 什么是PHP

PHP是一種適用于Web開發(fā)的動態(tài)語言,是一個用C語言實(shí)現(xiàn),包含大量組件的軟件框架。狹義方面來說,可以說是個UI框架(用戶界面,也可以說是UI模版(UI定義))


0x03 PHP設(shè)計(jì)理念與特點(diǎn)

多進(jìn)程模型:由于PHP是多進(jìn)程模型,不同請求間互不干涉,這樣保證了一個請求掛掉不會對全盤服務(wù)造成影響,當(dāng)然,隨著時代發(fā)展,PHP也早已支持多線程模型。

弱類型語言:和C/C++、Java、C#等語言不同,PHP是一門弱類型語言。一個變量的類型并不是一開始就確定不變,運(yùn)行中才會確定并可能發(fā)生隱式或顯式的類型轉(zhuǎn)換,這種機(jī)制的靈活性在web開發(fā)中非常方便、高效.

引擎(Zend)+組件(ext)的模式降低內(nèi)部耦合。

中間層(sapi)隔絕web server和PHP。

語法簡單靈活,沒有太多規(guī)范。

從下到上的四層體系:

Zend引擎:Zend整體用C語言實(shí)現(xiàn),是PHP的內(nèi)核部分。它將PHP代碼翻譯,實(shí)現(xiàn)了基本的數(shù)據(jù)結(jié)構(gòu),內(nèi)存分配機(jī)制及管理,提供了相應(yīng)的api供外部調(diào)用,是一切的核心。

Extensions:圍繞Zend引擎,extensions通過組件式的方式提供各種基礎(chǔ)服務(wù),我們常見的各種內(nèi)置函數(shù)、標(biāo)準(zhǔn)庫等都是通過 extension來實(shí)現(xiàn),用戶也可以根據(jù)需要實(shí)現(xiàn)自己的extension。

Sapi:Aerver Application Programming Interface,即服務(wù)端應(yīng)用編程接口,是PHP和web server的中間層。Sapi通過鉤子函數(shù),使PHP能和外部交互數(shù)據(jù),這也將PHP和上層應(yīng)用解耦。

上層應(yīng)用:就是我們平時編寫的PHP程序,通過不同的sapi方式得到各種各樣的應(yīng)用模式

這里有個很好的通俗比喻:如果PHP是一輛車,那么車的框架就是PHP本身,Zend是車的引擎(發(fā)動機(jī)),Extensions下面的各種組件就是車的輪子,Sapi可以看做是公路,車可以跑在不同類型的公路上,而一次PHP程序的執(zhí)行就是汽車跑在公路上。因此,我們需要:性能優(yōu)異的引擎+合適的車輪+正確的跑道。


0x05 Sapi

常見的Sapi有:

apache2handler:以apache作為webserver,采用mod_PHP模式運(yùn)行時候的處理方式,也是現(xiàn)在應(yīng)用最廣泛的一種。

fast-cgi:這是webserver和PHP直接的另一種交互方式,也就是大名鼎鼎的fastcgi協(xié)議,在最近fastcgi+PHP得到越來越多的應(yīng)用,也是異步webserver所唯一支持的方式。nginx就是通過php-fpm(fast-cgi)來解析php的。

cli:命令行調(diào)用的應(yīng)用模式



0x06 PHP執(zhí)行流程


拿到一段代碼后,經(jīng)過詞法解析、語法解析等階段后,源程序會被翻譯成一個個指令(opcodes),然后ZEND虛擬機(jī)順次執(zhí)行這些指令完成操作。PHP本身是用C實(shí)現(xiàn)的,因此最終調(diào)用的也是C的函數(shù),實(shí)際上,我們可以把PHP看做一個C開發(fā)的軟件。

PHP的執(zhí)行的核心是翻譯出來的一條一條指令,也即opcode。

Opcode是PHP程序執(zhí)行的最基本單位。一個opcode由兩個參數(shù)(op1,op2)、返回值和處理函數(shù)組成。PHP程序最終被翻譯為一組opcode處理函數(shù)的順序執(zhí)行。


0x07 PHP變量

PHP是一門弱類型語言,本身不嚴(yán)格區(qū)分變量的類型。PHP變量可以分為簡單類型(int、string、boolean)、集合類型(array、resource、object)和常量(const)。所有變量在底層都是同一種結(jié)構(gòu)zval。



資訊列表

其他的資訊
OTHER