PHP 5.3.0正式推出
已經不知道開發了多久,Beta再Beta,RC再RC的PHP 5.3.0版終於在今天(台北時間7月1日)正式登場了。
已經不知道開發了多久,Beta再Beta,RC再RC的PHP 5.3.0版終於在今天(台北時間7月1日)正式登場了。
說到PHP,可以說是任何作為網站開發者都熟悉的語言。PHP 3.0推出以來,結合C和Java語法形式,卻又具有弱型別和Script-Style撰寫方式的PHP很快的席捲了整個網路界,取代了ASP(on windows)和Perl(on unix),由於其開發快速,語法自由度高的特性,使得PHP在中小型網站開發應用上異常快速,直到目前為止,還是全球網站開發語言佔有率第一名,迄今為止LAMP(Linux/Apache/MySql/PHP)依然是被認為是網站應用標準的首選。
但是隨著PHP被廣泛的應用,PHP本身的缺點一一的被顯露出來,比如3.0缺乏對物件導向語法的支援,在4.0和5.0上獲得了一定的加強,Magic Function在安全性上的嚴重缺失,在5.0之後開始進行了修正。但是背負著從3.0以來的一些原罪,使得PHP的發展上受到限制,比如為了向下相容,使得很多錯置函數(類似功能的函數,但是在命名規則和變數順序上卻完全不同),和Function-based造成邏輯跟維護困難的開發模式等等都被保留了下來。而且做了這麼多措施,實際上還是不能完全向下相容。針對這些問題,PHP提出了5.3版的改版計畫,希望能夠解決過去許多困擾人的問題。
在PHP 6.0正式出來以前,PHP 5.3版是一個非常大的改版。改變幅度超過5.1到5.2版許多,也超過5.2.0到5.2.10等等之間的所有版本。
最大的改變,就是PHP加入了對namespace的支援。
在高階物件導向語言,不管是在java、C#、C++,甚至於Perl、Ruby中都有namespace的設計,雖然有些名稱上的不同(比如在java中使用的是package),但精神卻都是一樣的。PHP函式重名的情況非常嚴重,以至於所有的PHP物件都必須用冗長的類別名稱命名,比如說:Zend_Cache_Backend_File。不這樣做的話,當成是越寫越大,很容易就發生類別重名的錯誤。
PHP加入了對namespace的支援是很好。不過在5.3的正式版中,PHP卻捨棄了早期開發版本的::作為namespace的分隔符號,而使用了跟其他語言完全不同的:「\」。多麼與眾不同,你能想像以後寫程式的時候使用:
\com\mycom\myproj\mysubsystem
或是
$user = new \com\mycom\myproj\mysybsystem\User();
的語法出現?真的,十分的與眾不同。
要引用namespace,則是使用use這個keyword,這一點倒是跟Perl是一樣的。
除了改變最大的namespace之外,PHP 5.3還有以下的變動:
Anonymous Functions(匿名函數):跟javascript一樣的功能,你可以直接動態建立一個函數作為參數傳遞。這在javascript中十分有用,比如說:
$func = function($params) {
//context
}
或是
play($username, function($match) {//context });
雖然增加了系統的彈性,但混和javascript的寫法也可能讓程式變得更詭異。
加入NOWDOC、tenary short cut和jump label(其實就像是vb跟perl中的goto),__callStatic()函數。這個加入goto支援的設計十分的詭異,明明是為了要增加程式的結構性而設計了PHP 5.3,卻又加入破壞結構性的goto結構。
執行效能上的強化。
關於garbage collection的功能,(函數說明根本還沒寫,所以不知道這個到底是要幹啥)。
還有許許多多的改變,可以自己去看看,以後有機會再說明。
Popularity: 1% [?]

