PHP虛擬機(jī)
虛擬機(jī)也是計(jì)算機(jī),參考物理機(jī)的設(shè)計(jì),設(shè)計(jì)虛擬機(jī)時(shí),首先應(yīng)該考慮三個(gè)要素:指令,數(shù)據(jù)存儲(chǔ),函數(shù)棧幀;
指令 (推薦學(xué)習(xí):PHP視頻教程)
指令由操作碼和操作數(shù)組成;操作碼指明本指令的操作類型,操作數(shù)指明操作數(shù)本身或者操作數(shù)的地址;
數(shù)據(jù)存儲(chǔ)
PHP虛擬機(jī)支持多種數(shù)據(jù)類型:整型、浮點(diǎn)型、字符串、數(shù)組,對(duì)象等;
函數(shù)棧幀
PHP虛擬機(jī)實(shí)現(xiàn)了與物理機(jī)類似的函數(shù)棧幀結(jié)構(gòu);
使用 _zend_vm_stack表示棧結(jié)構(gòu);多個(gè)棧之間使用prev字段形成單向鏈表;top和end指向棧低和棧頂,分別為zval類型的指針;
總結(jié)
PHP虛擬機(jī)也是計(jì)算機(jī),有三點(diǎn)是我們需要重點(diǎn)關(guān)注的:指令集(包含指令處理函數(shù))、數(shù)據(jù)存儲(chǔ)(zval)、函數(shù)棧幀;
此時(shí)虛擬機(jī)已可以接受指令并執(zhí)行指令代碼;
但是,PHP虛擬機(jī)是專用執(zhí)行PHP代碼的,PHP代碼如何能轉(zhuǎn)換為PHP虛擬機(jī)可以識(shí)別的指令呢——編譯;
PHP虛擬機(jī)同時(shí)提供了編譯器,可以將PHP代碼轉(zhuǎn)換為其可以識(shí)別的指令集合;
理論上你可以自定義任何語言,只要實(shí)現(xiàn)編譯器,能夠?qū)⒛阕约旱恼Z言轉(zhuǎn)換為PHP可以識(shí)別的指令代碼,就能被PHP虛擬機(jī)執(zhí)行;
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com