发现PHP 5.4.14有如下扩展不兼容,是不是该升级了呢?考虑中。

jackxiang 2013-4-28 18:11 | |

root@192.168.137.128:~/software/xhprof-0.9.2/extension# php -v
Zend Guard Loader requires Zend Engine API version 220090626.
The Zend Engine API version 220100525 which is installed, is newer.
Contact Zend Technologies at http://www.zend.com/ for a later version of Zend Guard Loader.

PHP Warning:  PHP Startup: imagick: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP Warning:  PHP Startup: syck: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP Warning:  PHP Startup: lnice: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP Warning:  PHP Startup: taint: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP Warning:  PHP Startup: libevent: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP Warning:  PHP Startup: rabbit: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP Warning:  PHP Startup: mongo: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP Warning:  PHP Startup: xhprof: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP 5.4.14 (cli) (built: Apr 28 2013 15:16:51)



PHP 5.4 新功能:你應該升級嗎?
期待已久的 PHP 5.4 終於出爐了,這一個版本特別令人期待,原因是它包含了很多原本要等到 PHP 6 才見得到的功能,由於 PHP 6 難產,這些功能便通通帶到 PHP 5.4,所以這次雖然只是升級了一個小版本編號,但包含的改動卻是巨大的,有些甚至會引致兼容性問題,PHP 開發人員不能輕忽視之。本文將會扼要介紹這個新版本的功能,與及討論一下在甚麼情況下你才需要升級到新版本。

PHP 5.4 新功能
Traits
由於 PHP 不支持多重繼承 (multiple inheritance),這意味著 PHP 不能好像 C++ 那樣創建一個繼承了多個類別的新類別。從 PHP 5 開始類別可以繼承自多個接口 (interface),這是從 Java 啟發得來的簡單方法,避免了 C++ 因多重繼承而引致的含糊不清的問題。

不過,無論是使用 C++ 方式的多重繼承還是 Java 方式的多接口繼承,都很容易因繼承了太多內容而產生臃腫的類別,它包含的成員函式和變量比真正需要的多得多。

Traits 提供了一個簡單的替代方案,你可以像定義一個類別或接口那樣定義一個 trait,裡面包含了你需要的任何功能,然後你利用它創建一個新的類別。以下是來自 RFC 的一個例子:

PHP |      copy code |  ?  
01  
<?php
02  
trait Hello {
03  
  public function sayHello() {
04  
    echo 'Hello ';
05  
  }
06  
}
07  

08  
trait World {
09  
  public function sayWorld() {
10  
    echo ' World';
11  
  }
12  
}
13  

14  
class MyHelloWorld {
15  
  use Hello, World;
16  
}
17  

18  
$o = new MyHelloWorld();
19  
$o->sayHello();
20  
$o->sayWorld();
21  
// 輸出是 Hello World
內建網站伺服器
雖然 Apache 近年來在高效能網站伺服器的市場沒有以前那麼普及,對於 PHP 開發人員來說它仍然是測試平台上最受歡迎的工具之一,不過很多開發人員只是想安裝 Apache 在一個簡單的開發環境以做測試之用,Apache 過於繁鎖和複雜的配置便變得十分頭疼,所以 PHP 5.4 內建了一個全新編寫的網站伺服器,你只需要執行一個簡單的 PHP 指令便可以啟動一個可用來測試應用程序的伺服器,無須再苦惱怎樣設定 Apache 或任何伺服器。這個內置網站伺服器的另一個有趣的用途,是你可以用它來開發純粹在瀏覽器內運行的應用程式,這時你只需要安裝最基本的 PHP 套件。

以下是啟動 PHP 內建網站伺服器的指令:
$ php -S localhost:8000

Server is listening on localhost:8000... Press CTRL-C to quit.
[Thu Mar  3 05:42:06 2011] ::1:56258: /
[Thu Mar  3 05:42:06 2011] ::1:56259: /?=PHPE9568F34-A769-00AA02
[Thu Mar  3 05:42:06 2011] ::1:56260: /?=PHPE9568F35-A769-00AA04
二進制的整數表達式
當你需要在 PHP 程式碼中表達數字,你可以用十進制、十六進制或八進制,現在 PHP5.4 引進了二進制。

在八進制,你需要前綴 0,例如 010 代表數字 8,而不是 10。在十六進制,你將需要前綴 0x,比如 0X12 表示數字 18。在二進制中,你需要前綴 0B,例如 0b101 表示數字 5。

陣列的簡短語法
隨著 JSON 的普及,它已成為不同編程語言互相交換序列化數據的通用格式,JSON 與 PHP 的數字表達方法最大的差別在於陣列的表達法,JSON 使用方括號,而非 PHP 的 array(),有人建議把 JSON 的語法添加入 PHP,初時許多 PHP 的核心開發成員都不贊成,但許多用戶卻投贊成票,所以現在你可以這樣定義一個陣列:

PHP |      copy code |  ?  
1  
$a = [1, 2, 3];
2  
$b = ['紅色' : '蘋果', '黃色' : '檸檬', '綠色' : '西瓜'];
被取締的功能
每次 PHP 有新版本推出,偶然會有一些功能被取締,尤其是像這次的重要版本更新,通常被取締的功能在之前的版本中已被列為「過時」(deprecated) 的。

首先 PHP 5.4 取締了「魔術引號」(magic quotes) 功能,在之前的 PHP 版本,只要你在 php.ini 配置檔中設定適當的變量,PHP 便會自動替你把某些字符加上「轉義」(escape),使它們可以直接放入 SQL 語句中,問題是這種做法經常使第三方 PHP 組件變得不可靠,因為這些組件要檢查這項功能是否已經啟用,從而決定是否需要自行轉義這些特殊字符。此外,不同的數據庫有不同的字符需要轉義,所以一套固定的準則不可能適用於所有數據庫,理想的做法是關閉這個功能,由特定的數據庫介面函式來為字符轉義。

PHP 5.4 也取締了 safe_mode 配置,這項配置誤導了無數開發人員,事實上它並不「安全」,也衍生很多問題。

register_long_arrays 也被取締了,這意味著 $HTTP_GET_VARS 等陣列從此不再存在,這項配置在 PHP 5.3 已被列為「過時」,在 PHP 5.4 終於被取締了。

一直被安全專家批評的 register_globals 配置也被取締了 (謝天謝地),連同 register_long_arrays 的消失,以後大家只能用 $_GET、$_POST 和 $_REQUEST 來讀取表單的數據了。

效能大幅提升
PHP 5.4 在執行速度和記憶體使用量都大幅改進,據其中一名核心開發成員 Ilia Alshanetsky 透露:

在執行一般的應用程式時,速度可提升 5-20%。
執行標準效能測試程式時,速度甚至可提升 15-20%。
對於大部份應用程式,記憶體用量可節省最少 25%。
以上數字無疑是驚人的,必須明白 PHP 5.4 並沒有內建加速器或緩存處理系統 (原來的構思是有的,但後來因來不及整合到編譯器中,所以最後放棄了),它的效能竟也有如此巨大的進步。

我應否升級到 PHP 5.4?
讀到這裡你可能想知道是否值得升級到 PHP 5.4,PHP Classes 的站長 Manuel Lemos 有一些建議,部份建議是那麼明顯也許並不真正有用,但無論如何可以參考一下。

如果你不需要那些新的功能,不要升級
傳統智慧說永遠不要撤換正在領先的隊伍,如果你看過 PHP 5.4 的功能而沒有看到任何引起你興趣的東西,那又何苦由來升級呢?

如果你堅持要站在科技的最前端,必須要有心理準備由於一些你可能忽略了的改變,你的程式有機會不能在 PHP 5.4 中運作。

如果你仍然需要那些不再受支援的擴展元件,不要升級
如果你需要一些外部擴展元件,而這些擴展元件並未內建於 PHP 5.4 中,很大機會這些擴展元件尚未兼容這個新版本,所以在這些擴展元件升級到與 PHP 5.4 兼容之前,你不宜升級到 PHP 5.4。

給它一點時間
正所謂「新的版本,新的臭蟲」,這意味著 PHP 5.4 很大機會有一些新的臭蟲破壞你的程式,儘管 PHP 5.4 通過無數的測試,在它正式發佈後受到大量開發人員嘗試使用後,很大機會仍能找到臭蟲。比較明顯的臭蟲會很快被修正,所以你不妨稍等一下,也許最少一個月,讓核心開發團隊修正比較重要和明顯的臭蟲。

在你的開發平台進行測試
即使你決定不升級,卻應該在您的開發平台上試用 PHP 5.4。在最壞的情況下,如果它把你的程式搞得一團糟,你隨時可以回復到舊的 PHP 版本而不影響您的用戶,因為只有你或你的團隊才能使用該開發平台。

結論
PHP 5.4 並不算一個重大的 PHP 升級,但對於 PHP 社區來說看到新版本發佈始終是好事,因為它顯示了 PHP 有良好的發展活力。至於你是否會使用這個新版本,那是另一回事。

你又怎麼想呢?你喜歡這個 PHP 版本的新功能嗎?你打算使用它呢?你有不同的標準來決定是否升級嗎?有沒有一些在這篇文章中沒有提及的功能,而你卻認為很有意思?歡迎發表你的看法。
来自:http://www.hkpug.net/2012/03/05/php-5-4-%E6%96%B0%E5%8A%9F%E8%83%BD%EF%BC%9A%E4%BD%A0%E6%87%89%E8%A9%B2%E5%8D%87%E7%B4%9A%E5%97%8E%EF%BC%9F/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/6301/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2013-4-29 10:56
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]