?
This document uses PHP Chinese website manual Release
PHP概述
1 PHP的歷史發(fā)展
PHP是一種非常流行的高級(jí)腳本語(yǔ)言,尤其適合Web開(kāi)發(fā),快速、靈活和實(shí)用是PHP最重要的特點(diǎn)。PHP自1995年由Lerdorf創(chuàng)建以來(lái),在全球得到了非常廣泛的應(yīng)用。
在1995年早期以Personal Home Page Tools (PHP Tools) 開(kāi)始對(duì)外發(fā)表第一個(gè)版本,Lerdorf寫(xiě)了一些介紹此程序的文檔,并且發(fā)布了PHP1.0。在這早期的版本中,提供了訪客留言本、訪客計(jì)數(shù)器等簡(jiǎn)單的功能,之后越來(lái)越多的網(wǎng)站開(kāi)始使用PHP,并且強(qiáng)烈要求增加一些特性,在新的成員加入開(kāi)發(fā)行列之后,Rasmus Lerdorf 在1995年6月8日將 PHP/FI 公開(kāi)發(fā)布,希望可以通過(guò)社群來(lái)加速程序開(kāi)發(fā)與尋找錯(cuò)誤。這個(gè)發(fā)布的版本命名為 PHP 2,已經(jīng)有今日 PHP 的一些雛型,像是類(lèi)似 Perl 的變量命名方式、表單處理功能、以及嵌入到 HTML 中執(zhí)行的能力。程序語(yǔ)法上也類(lèi)似 Perl,有較多的限制,不過(guò)更簡(jiǎn)單、更有彈性。PHP/FI加入了對(duì)MySQL的支持,從此建立了PHP在動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)上的地位。到了1996年底,有15000個(gè)網(wǎng)站使用 PHP/FI。
在1997年,任職于 Technion IIT 公司的兩個(gè)以色列程序設(shè)計(jì)師:Zeev Suraski 和 Andi Gutmans,重寫(xiě)了PHP的解析器,成為PHP3的基礎(chǔ),而 PHP 也在這個(gè)時(shí)候改稱(chēng)為PHP:Hypertext Preprocessor,1998年6月正式發(fā)布 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 發(fā)布后開(kāi)始改寫(xiě) PHP 的核心,這個(gè)在1999年發(fā)布的解析器稱(chēng)為 Zend Engine,他們也在以色列的 Ramat Gan 成立了 Zend Technologies 來(lái)管理 PHP 的開(kāi)發(fā)。
在2000年5月22日,以Zend Engine 1.0為基礎(chǔ)的PHP 4正式發(fā)布,2004年7月13日則發(fā)布了PHP 5,PHP 5則使用了第二代的Zend Engine。PHP包含了許多新特色:完全實(shí)現(xiàn)面向?qū)ο?、引入PDO、以及許多性能方面的改進(jìn)。目前PHP5.X仍然是應(yīng)用非常廣泛的一個(gè)版本。
2 特性
PHP 獨(dú)特的語(yǔ)法混合了 C、Java、Perl 以及 PHP 自創(chuàng)新的語(yǔ)法,豐富的語(yǔ)法支持、同時(shí)支持面向?qū)ο?、面向過(guò)程,相比C、Java等語(yǔ)言具有語(yǔ)法簡(jiǎn)潔、使用靈活、開(kāi)發(fā)效率高、容易學(xué)習(xí)等特點(diǎn)。
開(kāi)源免費(fèi):PHP社群有大量活躍的開(kāi)發(fā)者貢獻(xiàn)代碼
快捷:程序開(kāi)發(fā)快,運(yùn)行快,技術(shù)本身學(xué)習(xí)快,實(shí)用性強(qiáng)
效率高:PHP消耗相當(dāng)少的系統(tǒng)資源,自動(dòng)gc機(jī)制
類(lèi)庫(kù)資源:有大量可用類(lèi)庫(kù)供開(kāi)發(fā)者使用
擴(kuò)展性:允許用戶(hù)使用C/C++擴(kuò)展PHP
跨平臺(tái):可以在unix、windows、max os等系統(tǒng)上面使用PHP
3 PHP的相關(guān)組成
3.1 SAPI
PHP本身可以理解為是一個(gè)庫(kù)函數(shù),提供語(yǔ)言的編譯與執(zhí)行服務(wù),它有標(biāo)準(zhǔn)的輸入、輸出,而SAPI是PHP的接入層,它接收用戶(hù)的請(qǐng)求,然后調(diào)用PHP內(nèi)核提供的一些接口完成PHP腳本的執(zhí)行,所以嚴(yán)格意義上講SAPI并不算PHP內(nèi)核的一部分。
PHP的角色就好比是leveldb,它實(shí)現(xiàn)了基本存儲(chǔ)功能,但是沒(méi)有網(wǎng)絡(luò)處理模塊,而我們基于leveldb實(shí)現(xiàn)的完整存儲(chǔ)服務(wù)就好比是SAPI。
PHP中常用的SAPI有cli、php-fpm,cli是命令行下執(zhí)行PHP腳本的實(shí)現(xiàn):bin/php script.php,它是單進(jìn)程的,處理模型比較簡(jiǎn)單,而php-fpm相對(duì)比較復(fù)雜,它實(shí)現(xiàn)了網(wǎng)絡(luò)處理模塊,用于與web服務(wù)器交互。
3.2 Zend引擎
Zend是PHP語(yǔ)言實(shí)現(xiàn)的最為重要的部分,是PHP最基礎(chǔ)、最核心的部分,它的源碼在/Zend目錄下,PHP代碼從編譯到執(zhí)行都是由Zend完成的,后面章節(jié)絕大部分的源碼分析都是針對(duì)Zend的。Zend整體由兩個(gè)部分組成:
編譯器: 負(fù)責(zé)將PHP代碼編譯為抽象語(yǔ)法樹(shù),然后進(jìn)一步編譯為可執(zhí)行的opcodes,這個(gè)過(guò)程相當(dāng)于GCC的工作,編譯器是一個(gè)語(yǔ)言實(shí)現(xiàn)的基礎(chǔ)
執(zhí)行器: 負(fù)責(zé)執(zhí)行編譯器輸出的opcodes,也就是執(zhí)行PHP腳本中編寫(xiě)的代碼邏輯