PHP语言特性和各版本的差异
?PHP語言簡介
PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法。
它可以比 CGI或者Perl更快速的執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。PHP具有非常強大的功能,所有的CGI的功能PHP都能實現,而且支持幾乎所有流行的數據庫以及操作系統。最重要的是PHP可以用C、C++進行程序的擴展!
?
特性
?
?????? 1、開放的源代碼: 所有的PHP源代碼事實上都可以得到。 2、PHP是免費的。 和其它技術相比,PHP本身免費。 3、php的快捷性 程序開發快,運行快,技術本身學習快。嵌入于HTML:因為PHP可以被嵌入于HTML語言,它相對于其他語言,編輯簡單,實用性強,更適合初學者。 4、跨平臺性強: 由于PHP是運行在服務器端的腳本,可以運行在UNIX、LINUX、WINDOWS下。 5、效率高: PHP消耗相當少的系統資源。 6、圖像處理: 用PHP動態創建圖像 7、面向對象: 在php4,php5 中,面向對象方面都有了很大的改進,現在php完全可以用來開發大型商業程序。 8、專業專注:PHP支持腳本語言為主,同為類C語言。
?
技術應用
?
1,偽靜態
2,靜態頁面生成
3,數據庫緩存
4,過程緩存
5,div+cssw3c標準
6,大負荷
7,分布式
8,jQuery框架集成
9,flex
10,桌面程序應用(不擅長)
11,支持MVC模型
?
PHP3
PHP3跟Apache服務器緊密結合的特性;
加上它不斷的更新及加入新的功能;而且幾乎支持所有主流與非主流數據庫;再以它能高速的執行效率,使得PHP在1999年中的使用站點已經超過了150000。加上它的源代碼完全公開,在 Open Source意識抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函數庫加入,以及不停地更新的活力,使得PHP無論在UNIX、Linux或是Windows的平臺上都可以有更多新的功能。它提供豐富的函數,使得在程序設計方面有著更好的支持。
?
PHP4
PHP4.0整個腳本程序的核心大幅更動,讓程序的執行速度,滿足更快的要求。在最佳化之后的效率,已較傳統CGI或者ASP等程序有更好的表現。而且還有更強的新功能、更豐富的函數庫。無論您接不接受,PHP 都將在 Web CGI 的領域上,掀起巔覆性的革命。對于一位專業的Web Master 而言,它將也是必修課程之一。
PHP 4.0是更有效的,更可靠的動態Web頁開發工具,在大多數情況運行比 PHP 3.0要快,其腳本描述更強大并且更復雜, 最顯著的特征是速率比的增加。PHP4.0這些優異的性能是PHP 腳本引擎重新設計產生的結果:引擎由 AndiGutmans 和 Zeev Suraski從底層全面重寫。PHP4.0 腳本引擎 ——Zend引擎,使用了一種更有效的編譯——執行方式, 而不是PHP 3.0 采用的執行 ——當解析時模型。
?
PHP4的優越性:
PHP4在3.0版的基礎上增加或增強了許多有用的特征,主要如下:
(1)別名:在PHP4中,可以利用引用為變量賦值,這給編程帶來了很大的靈活性。
(2)擴充了API模塊:PHP 4.0 為擴展的 API 模塊的提供了擴展PHP接口模塊, 它比舊的 API 版本顯著地快。 PHP 模塊已有的及最常用的接口多數被轉換到使用這個擴展的接口。
(3)自動資源釋放:PHP4增加了引用計數功能,這種新技術的引入使PHP4具有了自動內存管理功能,減輕了開發人員的負擔。
(4)布爾類型:PHP 4.0 支持布爾類型。
(5)進程生成:在 UNIX 環境下的 PHP 4.0 提供了一個很智能和通用的生成進程, 使用了一種名為基于automake/libtool的系統生成技術。
(6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持 ( 僅用于Windows 環境 ) 可以無縫地存取和訪問 COM 對象。
(7)與PHP 3.0 兼容性很好:PHP 4.0 是與 PHP 3.0 代碼向后兼容性接近100% 。由于 PHP 4 的改進的體系結構,兩者有一些細微的差別,但是大多數人將可能永遠不可能遇上這種情況。
(8)配置:PHP4重新設計和增強了PHP.ini文件,這使得用PHP.ini來配置PHP顯得極為容易,這個文件可以在運行時被Apache(unix系統)或由Windows 注冊(Windows 環境)。
(9)加密支持:PHP4實現了完整的加密, 這些加密功能是一個完整的mycrypt庫,并且 PHP 4.0 支持哈希函數。Blowfish,TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。
(10)類型檢查:PHP 4.0 支持同一操作符用于評類型檢查:===( 3 等號運算符), 為在兩個值和其類型之間作檢查。例如, '3' ===3 將視為假 ( 類型是不同的 ), 而 3 ==3 ( 相等判斷 ) 將視為真。
(11)FTP 支持:PHP 4.0 支持 FTP 。通常, 你會為通過一個調制解調器連接下載一個大文件提供一個接口。然而, 如果你確實有需要,可以使用PHP 。
(12)PHP4新增函數或功能增強函數:PHP 4.0 新增了許多函數,同時也將許多現有的函數功能進行了增強,以下是一些例子。 array_count_values() eval() foreach() include() ob_end_clean() ob_end_flush() ob_get_contents() ob_start() strip_tags() unset()
(13)here打印:PHP 4.0 的Here打印是與Perl類似的, 盡管完全不相同。Here是打印大容量文章的一個有用的方法,例如在 HTML文件中,不會漏掉任何一個字符,例如目錄標記。
(14)HTTP Session fallback 系統:為 HTTP Session管理的一個 fallback 系統在 PHP 4.0被實現 。缺省情況下,Session標識符由cookies存儲。如果沒有cookies支持或一項cookies任務失敗,Session標識符自動被創建并在 URL 的查詢字符串中被攜帶。
(15)ISAPI 支持:PHP 4.0 能作為一個個性化的 ISAPI 模塊作為 IIS插件 。這比 PHP 3.0 更有效, 它作為一個外部的程序來運行。
(16)內存:PHP 4.0 能更有效的使用內存, 導致較少的內存占用消耗,這主要歸功于引用計數技術的實現。
?????? (17)其他類成員函數:在 PHP 4.0 你能在成員函數本身的作用域或全局范圍內調用其他類的成員函數。例如,你能用一個子函數覆蓋父函數,并在子函數中調用父函數。
(18)多維數組:在 PHP 4.0 ,利用GET,POST,Cookies的進行的數據傳輸支持多維數組。
(19)個性化的 HTTP Session支持:HTTP Session處理, 包括 fallback 系統管理,在 PHP 4.0被它的新庫函數實現 。在版本 3.0 中處理Session要求使用 PHPLIB 和第三方的庫函數, 它比把Session直接地由 PHP 支持慢了許多。
(20)個性化的 Java 支持:PHP 4.0 支持和java的交互。這種個性化的Java 支持為PHP 在 Java 對象上創建和使用方法提供一個簡單并且有效的工具。
(21)對象和數嵌套組:PHP 4.0 實現了功能更加強大的對象, 移去了 PHP 3.0存在的種種句法限制。對象能在數組以內被嵌套并且反過來也如此, 可以根據你的需要實現嵌套。
(22)面向對象的編程:PHP 4.0 為面向對象的編程和構造類及對象提供擴展的功能和新特征。PHP4實現了對象重載,引用技術等新技術。
(23)對象重載支持:對象重載語法允許第三方的基于面向對象的類庫使用 PHP4 的面向對象的特征存取他們自身的功能。使用這個特征的一個 COM 模塊已經被實現了。
(24)輸出緩沖支持:PHP 提供了一個輸出緩沖函數集合。輸出緩沖支持允許你寫包裹函數功能壓縮緩沖區。在 PHP4 的輸出緩沖支持允許 HTML 頭信息存放, 無論 HTML的正文是否輸出。頭信息( (header(), content type, and cookies ) 不采用緩沖 。
(25)增加了PCRE 庫:PHP 4.0 包括一個 Perl 兼容的正則表達式(PCRE ) 庫, 和正常regex庫一起與 PHP 綁定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正規表達式之間有一些細微差別。
(26)PHP.ini 文件:PHP.ini文件在 PHP4.0 被重新設計, 使用的 PHP 的配置PHP.ini是更容易并且更有效的。全部文件能被Apache 在運行時間操作 ( 在 Apache環境 下 ) 或由 Windows 注冊表 ( 在 Windows 下面 ) 。被加入PHP.ini文件的配置指令自動地在所有相關的模塊中被支持。
(27)引用計數:PHP 4.0 為系統中的每個數值提供了引用計數, 包括資源。一旦一個資源不再被任何變量引用,它自動地被釋放以節省內存資源。利用這個特征的最明顯的例子一個內置SQL查詢的循環語句。在PHP 3.0中 ,每次遞歸另外的 SQL 結果集合重復申請內存,直到腳本執行完畢,這些結果集合占用的內存才被釋放。
(28)支持引用:通過引用可以改變一個變量的值。
(29)函數的運行時綁定:PHP 4.0 的運行時間綁定功能允許你在他們被聲明以前調用, 無論聲明是否在代碼以后或是在運行時間。
(30)類的運行時信息:PHP 4.0 支持在運行時刻存取下列類信息:一個對象的類名,一個對象的父類的類名字,以及對象函數所在的名字。
(31)服務器抽象層:為支持Web服務器提供了增強型 SAPI ( 服務器 API ) 接口,是 PHP 4.0 不可分的一部分。這個服務器抽象層,提供了通用的WEB服務器接口支持,支持多線程WEB服務器,為大多數的WEB服務器提供透明的支持, 這些服務器包括 Apache ,IIS ( ISAPI ), 以及 AOL 服務器。
(32)語法的點亮顯示:PHP 4.0 語法的點亮顯示允許開發者看見源代碼而不是腳本, 這個功能比PHP 3.0中的更有效。它跑得更快,更執行得更好,并且產生更緊湊的HTML代碼。
(33)由引用改變變量的值:PHP 4.0 由引用支持可變的賦值, “關聯”的2個變量之中個的任何一個的值被改變,另外的變量的值同樣被改變,這類似與C中的指針類型。
(34)在引用字符串中的變量引用:PHP 4.0 增強了在引用字符串中的變量引用。
?
PHP5
?
PHP5在長時間的開發及多個預發布版本后,2004年7月13日,PHP5.0發布。該版本以Zend引擎Ⅱ為引擎,并且加入了新功能如PHP Data Objects(PDO)。現在PHP5.0版本強化更多的功能。首先,完全實現面向對象,提供名為PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直觀地訪問XML數據、名為SimpleXML的XML處理用界面。同時還強化了XMLWeb服務支持,而且標準支持SOAP擴展模塊。數據庫方面,PHP新版本提供旨在訪問MySQL的新界面——MySQL。除此前的界面外,還可以使用面向對象界面和預處理語句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上還捆綁有小容量RDBMS-SQLite.
1、新的對象模式 (New Object Mode)
PHP5 中的對象已經進行了較系統、較全面的調整,現在的樣子可能看起來會有些類似于 Java。本小節著重講述 PHP5 中新的對象模式,并舉了一些較簡易的例子來說明。就讓本節成為你的 PHP5 之旅的一個新起點吧。:)
* 構造函數和析構函數
* 對象的引用
* 對象的克隆
* 對象中的私有、公共及受保護模式
* 接口 (Interfaces)
* 抽象類
* __call
* __set 和 __get
* 靜態成員
構造函數和析構函數
在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,并且在 PHP4 中沒有析構函數的概念。
在 PHP5 中,構造函數被統一命名為 __construct,并且引入了析構函數的概念,被統一命名為 __destruct。
對象的引用
在PHP4中,傳遞變量給一個函數或方法,實際是把這個變量做了一次復制,也就意味著你傳給函數或方法的是這個變量的一個副本,除非你使用了引用符號“&” 來聲明是要做一個引用,而不是一個 Copy。在 PHP5中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。
對象的克隆
當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎么辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。
對象中的私有、公共及保護模式
PHP4 中,一個對象的所有方法和變量都是公共的,這意味著你可以在一個對象的外部操作其中的任意一個變量和方法。PHP5 引入了三種新的用來控制這種存取權限的模式,它們是:公共的(Public)、受保護的(Protected)及私有的(Private)。
公共模式(Public):允許在對象外部進行操作控制。
私有模式(Private):只允許本對象內的方法對其進行操作控制。
受保護模式(Protected):允許本對象及其父對象對其進行操作控制。
接口 (Interfaces)
PHP4中的對象支持繼承,要使一個對象成為另一個對象的派生類,你需要使用類似 “class foo extends parent” 的代碼來控制。PHP4 和 PHP5 中,一個對象都僅能繼承一次,多重繼承是不被支持的。不過,在 PHP5中產生了一個新的名詞:接口,接口是一個沒有具體處理代碼的特殊對象,它僅僅定義了一些方法的名稱及參數,此后的對象就可以方便的使用'implement' 關鍵字把需要的接口整合起來,然后再加入具體的執行代碼。
這對提高代碼的可讀性及通俗性有很大的幫助,通過上面的例子可以看到,對象 foo 包含了displayable 和 printable 兩個接口,這時我們就可以清楚的知道,對象 foo 一定會有一個 display() 方法和一個print() 方法,只需要去了解接口部分,你就可以輕易的操作該對象而不必去關心對象的內部是如何運作的。
抽象類
抽象類不能被實例化。
抽象類與其它類一樣,允許定義變量及方法。
抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。
__call
PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在的方法,__call 方法將會被自動調用。
__set 和 __get
這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變量和方法。
類型指示
在 PHP5 中,你可以在對象的方法中指明其參數必須為另一個對象的實例。
靜態成員
靜態成員和靜態方法在面象對象編程的術語中被稱作 “類方法(class methods)” 和 “類變量(class variables)”。
“類方法” 在一個對象沒有實例化前允許被調用。同樣,“類變量” 在一個對象沒有實例化前可以被獨立操作控制(不需要用一個對象的方法來控制)。
2、異常處理 (Exceptions)
異常處理是公認的處理程序錯誤的理想方法,在 Java 及 C 中都有這個概念,我們欣喜的看到,在 PHP5 已經加入了這方面的應用。你可以嘗試使用 “try” 和 “catch” 來控制程序的錯誤。當有錯誤發生的時候,代碼會把錯誤交給 “catch” 子句來處理,在 “catch” 子句中,你需要指明要把錯誤交給某個對象處理,這樣做可以使代碼結構看起來更清晰,因為現在我們可以把所有的錯誤信息交給一個對象來處理。
自定義錯誤處理
你可以很方便的用自定義的處理錯誤的代碼來控制你的程序中的意外。你僅僅需要從異常類中派生出一個自己的錯誤控制類,在你自己的錯誤控制類中,你需要有一個構造函數和一個 getMessage 方法。
3、名稱空間 (Namespace)
名稱空間對類的分組或函數分組很有用。它可以把一些相關的類或函數給組合到一起,方便以后調用。
例:名稱空間
<?php
namespace Math
{
class Complex
{
//...code...
function __construct()
{
print("hey");
}
}
}
$m = new Math::Complex();
?>
注意你需要在何種情況下使用名稱空間,在實際運用中,你可能會需要聲明兩個或多個名稱一樣的對象來做不同的事情,那么你就可以把他們分別放到不同的名稱空間中去(但接口是要相同的)。
?
PHP6設想
1.支持Unicode
支持Unicode是有其必然,雖然Unicode占用較多的空間,但Unicode帶來的便利性,遠超過占用空間的缺點,尤其在國際化的今天,硬件設備越來越強大,網速也大幅度的提升,這么一點小小的缺點是可以忽略的。另外一點,PHP也可以在.ini文件中設定是否開啟支持Unicode,決定權在你自己,這是一個不錯的點子,關掉Unicode的支持,PHP的性能并不會有大幅度的提升,主要的影響在于需要引用字符串的函數。.
2.Register Globals 將被移除
這是一個重要的決定,許多新進的PHP開發者會覺得RegisterGlobals蠻方便的,但是卻忽略了RegisterGlobals會帶來程序上安全性的隱患,大多數的主機上此項功能是關閉的,印象PHP4.3.x版開始時,此項默認設置值即是關閉狀態,PHP6正式移除RegisterGlobals也代表著如果程序是由PHP3時代的產物,將完全無法使用,除了改寫一途外,別無他法。相信現在的PHP世界里,仍使用PHP3時代所產生的程序應該是少之又少。
3.Magic Quotes 將消失
Magic Quotes主要是自動轉義需要轉義的字符,此項功能移除也符合大多數PHP開發者的心聲。
4.Safe Mode 取消
老實說,這個模式不知道哪里不好,取消就取消吧,反正也用不到
5.'var' 別名為 'public'
在類中的var聲明變成public的別名,相信是為了兼容PHP5而作的決定,PHP6現在也可以稱作為OO語言了。
6.通過引用返回將出錯
現在透過引用返回編譯器將會報錯 例如$a =& new b()、function &c(),OO語言默認就是引用,所以不需要再使用&了。
7.zend.ze1 compatbility mode 將被移去
Zend.ze1相容模式將被移去,PHP5是為兼容舊有PHP4,所以在.ini中可選擇是否開啟相容模式,原因在于PHP5使用的是第二代解析引擎,但是相容模式并不是百分之百能解析PHP4語法,所以舊時代的產物,移除。
8.Freetype 1 and GD 1 support 將不見
這兩個是很久的Libs,所以不再支持,GD1早已被現在的GD2取代了。
9.dl() 被移到 SAPI 中
dl()主要是讓設計師加載extension Libs,現在被移到 SAPI 中
10.Register Long Array 去除
從PHP5起默認是關閉,再PHP6中正式移除。
11.一些Extension的變更
例如 XMLReader 和 XMLWriter將不再是以Extension的方式出現,他們將被移入到PHP的核心之中,并且默認是開啟,eregextension將被放入PECL,代表著它將被移出PHP核心,這也為了讓路給新的正則表達式extension,此外,Fileinfoextension 也將被導入PHP的核心之中。
12.APC將被導入核心
這是一個提高PHP性能的功能,現在它將被放入PHP核心中,并且可以選擇是否啟用APC
13.告別ASP風格的起始標簽
原來是為了取悅ASP開發者轉向使用PHP,現今已經不再需要這種做法了
?
擴展閱讀:- 1
PHPChina:http://bbs.phpchina.com/?fromuid=171390
- 2
PHP官方網站http://www.php.net
- 3
php技術資源?http://www.php100.com
- 4
PHP教程:http://www.knowsky.com/
- 5
WEB安全性-2010_OWASP_TOP10:http://wenku.baidu.com/view/2fb76b4be45c3b3567ec8bdf.html
總結
以上是生活随笔為你收集整理的PHP语言特性和各版本的差异的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GAE、SAE与BAE的对比分析
- 下一篇: Centos下Yum安装PHP5.5,5