從
許多方面來看,PHP語言都是開源項目的典型代表,最初創建它只是為了滿足一個開發人員自己的需要,在此之後又由於日益擴大的PHP社區的需求而不斷改進。作為一個剛剛涉足這個領域的開發人員,對PHP的發展歷程有所了解是很重要的,因為它能幫助你體會到這種語言的優勢,另外從某種程度上還可以理解PHP是如何偶然地形成其獨有特性的。
而且,由於這種語言如此流行,如果能了解不同版本之間的差別(尤其是版本4、5和版本6),在針對你自己的需求評價Web托管提供商和PHP驅動的應用程序時會有很大幫助。
為了幫助你盡快入門,這一章將介紹PHP的特性和不同版本之間的差別,你將了解到:
q 一個由加拿大開發人員開發的網頁的訪問量計數器如何造就了世界上最流行的腳本語言之一;
q PHP的開發人員怎樣一次次地改進這種語言,最終發布了迄今為止的最佳版本——PHP 5;
q 為什麼PHP 6將使PHP在企業中的應用范圍進一步擴大;
q PHP的哪些特性吸引了程序員新手和專業程序員。
注解 本書出版時,PHP 6還只是beta測試版本,不過很多特性已經足夠穩定,完全可以在本書中進行討論。不過,需要提前聲明,在發布最終版本之前其中一些特性可能會有所改變。
1.1 歷史
最初的PHP要追溯到1995年,當時一個名叫Rasmus Lerdorf的獨立程序員開發了一個Perl/CGI腳本,用來了解有多少訪問者閱讀了他的在線簡歷。他的腳本執行兩項任務:將訪問者信息記入日志,顯示網頁訪問者的數量。Web雖然現在已經家喻戶曉,但在當時卻很年輕,所以類似的工具以前從未有過,於是有不少人向Lerdorf發送電子郵件咨詢他的這個腳本。自此,Lerdorf開始分發他的工具集,並稱之為個人主頁(PHP,Personal Home Page),這是PHP的第一個名字。
對PHP工具集的呼聲很高,這促使Lerdorf繼續開發這種語言。他增加了一個能把在HTML表單中輸入的數據轉換為符號變量的功能,從而允許導出到其他系統,這或許算得上是早期最突出的一次改進。為此,他選擇用C而不是Perl代碼來進行後續的開發。對PHP工具集的不斷增補在1997年11月達到了頂峰,這時發行了PHP 2.0,稱之為“個人主頁/表單解釋器”(PHP/FI)。由於PHP不斷普及,所以2.0版本中來自全世界的程序員進行大量改進。
這個新PHP版本非常流行,很快就有一個核心開發團隊加入到了Lerdorf的開發當中。他們保持了原先在HTML中直接加入代碼的概念,重新編寫了解析引擎,這就誕生了PHP 3.0,全稱正式改為PHP:超文本預處理器(PHP:Hypertext Preprocessor)。到1998年6月發行版本3.0為止,已經有超過5萬個用戶在使用PHP改進其網頁。
接下來的兩年中,開發繼續狂熱地進行著,又增加了成百上千項功能,用戶數量也在飛速增長。在1999年初,Netcraft(http://www.netcraft.com/)公布了一個保守的估計,稱用戶數已經超過了100萬,這說明PHP已經成為了世界上最流行的腳本語言之一。它的廣泛流傳甚至超出了開發人員最樂觀的期望,並且很快用戶們准備用PHP開發功能更強大的應用程序。兩位核心開發人員(Zeev Suraski和Andi Gutmans)開始徹底重新考慮PHP的工作方式,最終改寫了PHP的解析器,稱之為Zend腳本引擎。這些工作的最終成果就是PHP 4的發布。
注解 除了領導開發Zend引擎和指導PHP語言的整體開發外,Suraski和Gutncans還共同創建了Zend技術有限公司(http://www.zend.com/)。Zend是關於開發、部署和管理PHP應用的產品和服務的主要提供商。若想了解更多關於該公司產品與服務的信息以及大量免費的學習資源請訪問Zend網站。
PHP 4添加了以下幾項對該語言的企業級改進:
q 改進了資源處理。可擴展性是版本3.x的主要缺點之一,這主要是因為設計者低估了這種語言,沒考慮到它會大量用於大規模應用程序。最初並沒有打算用這種語言開發企業級網站,但後來確實有這樣的嘗試,這就使得開發人員開始重新考慮這種語言的機制。
q 面向對象的支持。版本4在一定程度上加入了面向對象的功能,盡管一般認為實現得不怎麼樣。不過,對於使用傳統面向對象程序設計(OOP)語言的用戶來說,這個新特性在吸引這些用戶方面起到了非常重要的作用。除了對象重載和運行時類信息,PHP還支持標准類和對象開發方法。版本5支持更復雜的OOP實現,第6章將介紹這方面的內容。
q 內置的會話處理支持。版本3.x通過第三方包PHPLIB(http://phplib.sourceforge.net)來支持HTTP會話處理,在版本4中HTTP會話處理則是內置的功能。這個特性使得開發人員可以相當高效輕松地跟蹤用戶活動和偏好。第18章將介紹PHP的會話處理功能。
q 加密。MCrypt(http://mcrypt.sourceforge.net)庫引入到默認發行包中,為用戶提供了完全加密和散列加密,使用的加密算法包括Blowfish、MD5、SHA1和三重DES等。第21章將討論PHP的加密功能。
q ISAPI支持。對ISAPI的支持使用戶能夠將PHP與微軟的IIS Web服務器結合使用。第2章介紹如何在IIS和Apache Web服務器上安裝PHP。
q 內置COM/DCOM支持。對Windows用戶來說,另一個好處是PHP 4能夠訪問和實例化COM對象。這項功能擴展了與Windows應用程序的互操作性。
q 內置Java支持。這也是PHP在互操作性方面的一大進步,版本4.0支持PHP應用程序綁定Java對象。
q 與Perl兼容的正則表達式(PCRE)庫。Perl語言一直在字符串解析領域雄霸天下,占據著統治地位。開發人員知道,如果想讓PHP得到廣泛認可,強大的正則表達式功能會起到重要作用。他們的做法只是集成Perl的功能,而不是重新開發,並將PCRE庫的包集成在PHP的默認發行包中(版本
除了這些特性外,版本4還添加了幾百項功能,大大提升了這種語言的能力。本書中,我們將討論其中大部分功能。
在PHP語言的發展歷程上,PHP 4代表著一次巨大的飛躍。這個新版本帶來的新功能、強大能力和可擴展性對開發新手和老手都產生了不小的震動。但PHP開發團隊並不滿足於長時間只擁有這一項成果,於是不久以後他們就開始著手開展另一個裡程碑式的任務,要推出一門領導Web腳本領域的語言:PHP 5。
版本5是PHP語言發展歷程中的另一座分水嶺。雖然前面的主要版本已經增加了許多庫,版本5則在現有的功能上又進行了許多改進,並且增加了成熟的編程語言架構才有的一些特性。
q 極大地提高了面向對象能力。PHP的面向對象架構得到了改進,這是版本5最突出的特點。版本5增加了很多功能,如顯式構造函數和析構函數、對象克隆、類抽象、變量作用域和接口等。另外,PHP在對象管理方面也有重大改進。第6章和第7章將詳細介紹這些內容。
q try/catch異常處理。具有諷刺意味的是,在結構化編程語言中,設計錯誤處理策略本身卻非常容易出錯,而且很難保持一致。為了解決這個問題,版本5開始支持異常處理。在許多語言中,如C++、C#、Python和Java等,異常處理長期以來一直都是錯誤管理方面的中流砥柱,它為建立標准化的錯誤報告邏輯提供了一種絕佳的方法。這種方便的新方法將在第8章中介紹。
q 改進的XML和Web服務支持。現在的XML支持建立在libxml2庫基礎上,還引入一個很新但非常有前途的擴展包來解析和處理XML,即SimpleXML。此外,PHP 5還支持SOAP擴展。第