深入理解PHP內(nèi)核[讀書筆記](méi)--第二章:用戶代碼執(zhí)行--PHP腳本的執(zhí)行

腳本執(zhí)行:

在前面的章節(jié)介紹了PHP的生命周期盏浙,PHP的SAPI,SAPI處于整個(gè)架構(gòu)較上層貌虾,而真正的執(zhí)行主要由Zend引擎來(lái)完成,這一小節(jié)我們介紹PHP腳本的執(zhí)行啼染。

目前編程語(yǔ)言可以分為兩大類:

第一類:像C/C++琢岩,.NET,Java之類的編譯型語(yǔ)言,它們的共性是:運(yùn)行之前必須對(duì)源代碼進(jìn)行編譯师脂,然后運(yùn)行編譯后的目標(biāo)文件担孔。

第二類:比如PHP,javascript,Ruby,Python這些解釋型語(yǔ)言江锨,他們都無(wú)需經(jīng)過(guò)編譯即可“運(yùn)行”,雖然可以理解為直接運(yùn)行糕篇,但是他們并不是直接真的直接就被機(jī)器理解啄育,機(jī)器智能理解機(jī)器語(yǔ)言,那這些語(yǔ)言是怎么被執(zhí)行的呢拌消,一般這些語(yǔ)言都需要一個(gè)解釋器挑豌,由解釋器來(lái)執(zhí)行這些源碼,實(shí)際上這些語(yǔ)言還是會(huì)經(jīng)過(guò)編譯環(huán)節(jié)墩崩,只不過(guò)它們一般會(huì)在運(yùn)行的時(shí)候?qū)崟r(shí)進(jìn)行編譯氓英。為了效率,并不是所有語(yǔ)言在每次執(zhí)行的時(shí)候都會(huì)重新編譯一遍鹦筹,比如PHP的各種opcode緩存擴(kuò)展(如APC,Xcache,eAccelerator等)铝阐,比如Python會(huì)將編譯的中間文件保存成pyc/pyo文件,避免每次運(yùn)行重新編譯所帶來(lái)的性能損失铐拐。

用具體的例子來(lái)展示一下PHP腳本的執(zhí)行:

hello.php文件里面的代碼如下:


$str = "Hello World";

echo $str;

通過(guò)cli命令行執(zhí)行如下程序:

$ php ./hello.php

整體的程序執(zhí)行:

1 如上例中徘键,傳遞給php程序需要執(zhí)行的文件,php程序完成基本的準(zhǔn)備工作后啟動(dòng)PHP及Zend引擎遍蟋,加載注冊(cè)的擴(kuò)展模塊吹害。

2 初始化完成后讀取腳本文件,Zend引擎對(duì)腳本文件進(jìn)行詞法分析虚青、語(yǔ)法分析它呀、然后編譯成opcode執(zhí)行。如果安裝了apc之類的opcode緩存挟憔,編譯環(huán)境可能會(huì)被跳過(guò)而直接從緩存中讀取opcode執(zhí)行钟些。

腳本的編譯執(zhí)行

_______________________________________________________________________________

PHP在讀取到腳本文件后首先對(duì)代碼進(jìn)行詞法分析,PHP的詞法分析器是通過(guò)lex生成的绊谭,詞法規(guī)則文件在$PHP_SRC/Zend/zend_language_scanner.l,這一階段lex會(huì)將源代碼按詞法規(guī)則切分一個(gè)一個(gè)的標(biāo)記(token).PHP提供了一個(gè)函數(shù)token_get_all(),該函數(shù)接收一個(gè)字符串參數(shù)政恍,返回一個(gè)按照詞法規(guī)則切分好的數(shù)組。

Zend引擎詞法分析器做的事情达传,就是將代碼切分為一個(gè)個(gè)的標(biāo)記篙耗。

然后使用語(yǔ)法分析器(PHP使用bison生成語(yǔ)法分析器,規(guī)則見(jiàn)$PHP_SRC/Zend/zend_language_parser.y),bison根據(jù)規(guī)則進(jìn)行相應(yīng)的處理宪赶,如果代碼找不到匹配的規(guī)則宗弯,也就是語(yǔ)法錯(cuò)誤時(shí)Zend引擎會(huì)停止,并輸出錯(cuò)誤信息搂妻。

php初學(xué)者---千鋒php課堂筆記

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒙保,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子欲主,更是在濱河造成了極大的恐慌邓厕,老刑警劉巖逝嚎,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異详恼,居然都是意外死亡补君,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門昧互,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挽铁,“玉大人,你說(shuō)我怎么就攤上這事敞掘∵淳颍” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵渐逃,是天一觀的道長(zhǎng)够掠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)茄菊,這世上最難降的妖魔是什么疯潭? 我笑而不...
    開(kāi)封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮面殖,結(jié)果婚禮上竖哩,老公的妹妹穿的比我還像新娘。我一直安慰自己脊僚,他們只是感情好相叁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著辽幌,像睡著了一般增淹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乌企,一...
    開(kāi)封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天虑润,我揣著相機(jī)與錄音,去河邊找鬼加酵。 笑死拳喻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猪腕。 我是一名探鬼主播冗澈,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陋葡!你這毒婦竟也來(lái)了亚亲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捌归,沒(méi)想到半個(gè)月后颊亮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陨溅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绍在。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片门扇。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖偿渡,靈堂內(nèi)的尸體忽然破棺而出臼寄,到底是詐尸還是另有隱情,我是刑警寧澤溜宽,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布吉拳,位于F島的核電站,受9級(jí)特大地震影響适揉,放射性物質(zhì)發(fā)生泄漏留攒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一嫉嘀、第九天 我趴在偏房一處隱蔽的房頂上張望炼邀。 院中可真熱鬧,春花似錦剪侮、人聲如沸拭宁。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杰标。三九已至,卻和暖如春彩匕,著一層夾襖步出監(jiān)牢的瞬間腔剂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工推掸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桶蝎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓谅畅,卻偏偏與公主長(zhǎng)得像登渣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毡泻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容