亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

php運(yùn)行原理 .php如何運(yùn)行


一、php7的執(zhí)行原理概述
我們了解到的高級(jí)編程語(yǔ)言大體分為兩種:一種是編譯型語(yǔ)言,一種是解釋型語(yǔ)言,像c、go語(yǔ)言等就是編譯型語(yǔ)言,在應(yīng)用程序執(zhí)行之前,就將程序代碼翻譯成匯編語(yǔ)言,然后根據(jù)軟硬件環(huán)境編譯成目標(biāo)文件 。而解釋型語(yǔ)言,在程序運(yùn)行時(shí)才被翻譯成機(jī)器語(yǔ)言,執(zhí)行一次解釋一次,所以效率相對(duì)較低 。
在php7中,源代碼首先進(jìn)行詞法分析,將代碼切分為多個(gè)字符串單元,分割后的字符串叫做token,獨(dú)立的token是無(wú)法表達(dá)語(yǔ)義的,需要經(jīng)過(guò)語(yǔ)法分析,將token轉(zhuǎn)換成抽象語(yǔ)法樹(shù)(AST) 。之后,抽象語(yǔ)法樹(shù)在轉(zhuǎn)換為機(jī)器指令執(zhí)行,這些指令在php中成為opcode 。如常見(jiàn)的 echo 對(duì)應(yīng)的opcode指令就是ZEND_ECHO 。
(1)token
token是php代碼被切割成的有意義的標(biāo)識(shí),通過(guò)token_get_all()函數(shù)查看到token的值轉(zhuǎn)換成一個(gè)二維數(shù)組,每個(gè)成員數(shù)組的第一個(gè)值為token對(duì)應(yīng)的枚舉值,第二個(gè)值為token對(duì)應(yīng)的字符串內(nèi)容,第三個(gè)值為代碼對(duì)應(yīng)的行號(hào) 。
(2)AST
token是一個(gè)個(gè)單獨(dú)的“詞塊”,需要借助規(guī)則來(lái)串聯(lián),串聯(lián)后的產(chǎn)物就是php7新增的AST,實(shí)現(xiàn)了php編譯器和解釋器的解耦,有效提升了可維護(hù)性 。
(3)opcodes
AST扮演了源碼到中間代碼的臨時(shí)存儲(chǔ)介質(zhì)的角色,還需要轉(zhuǎn)換成opcode才能被引擎執(zhí)行,opcode是單獨(dú)指令,opcodes是opcode的集合形式,是php執(zhí)行過(guò)程中的中間代碼,類(lèi)似java的字節(jié)碼,opcode生成之后由虛擬機(jī)執(zhí)行 。
我們知道,php工程優(yōu)化中有個(gè)比較常見(jiàn)的開(kāi)啟“開(kāi)啟opcache” 。指的就是opcodes緩存,通過(guò)省去了從源碼到opcode的階段,引擎直接執(zhí)行緩存的opcode,以提升性能 。


    以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專(zhuān)業(yè)人士給予相關(guān)指導(dǎo)!

    「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: