<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[发现PHP 5.4.14有如下扩展不兼容，是不是该升级了呢？考虑中。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Sun, 28 Apr 2013 10:11:07 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/>root@192.168.137.128:~/software/xhprof-0.9.2/extension# php -v<br/>Zend Guard Loader requires Zend Engine API version 220090626.<br/>The Zend Engine API version 220100525 which is installed, is newer.<br/>Contact Zend Technologies at http://www.zend.com/ for a later version of Zend Guard Loader.<br/><br/>PHP Warning:&nbsp;&nbsp;PHP Startup: imagick: Unable to initialize module<br/>Module compiled with module API=20090626<br/>PHP&nbsp;&nbsp;&nbsp;&nbsp;compiled with module API=20100525<br/>These options need to match<br/> in Unknown on line 0<br/>PHP Warning:&nbsp;&nbsp;PHP Startup: syck: Unable to initialize module<br/>Module compiled with module API=20090626<br/>PHP&nbsp;&nbsp;&nbsp;&nbsp;compiled with module API=20100525<br/>These options need to match<br/> in Unknown on line 0<br/>PHP Warning:&nbsp;&nbsp;PHP Startup: lnice: Unable to initialize module<br/>Module compiled with module API=20090626<br/>PHP&nbsp;&nbsp;&nbsp;&nbsp;compiled with module API=20100525<br/>These options need to match<br/> in Unknown on line 0<br/>PHP Warning:&nbsp;&nbsp;PHP Startup: taint: Unable to initialize module<br/>Module compiled with module API=20090626<br/>PHP&nbsp;&nbsp;&nbsp;&nbsp;compiled with module API=20100525<br/>These options need to match<br/> in Unknown on line 0<br/>PHP Warning:&nbsp;&nbsp;PHP Startup: libevent: Unable to initialize module<br/>Module compiled with module API=20090626<br/>PHP&nbsp;&nbsp;&nbsp;&nbsp;compiled with module API=20100525<br/>These options need to match<br/> in Unknown on line 0<br/>PHP Warning:&nbsp;&nbsp;PHP Startup: rabbit: Unable to initialize module<br/>Module compiled with module API=20090626<br/>PHP&nbsp;&nbsp;&nbsp;&nbsp;compiled with module API=20100525<br/>These options need to match<br/> in Unknown on line 0<br/>PHP Warning:&nbsp;&nbsp;PHP Startup: mongo: Unable to initialize module<br/>Module compiled with module API=20090626<br/>PHP&nbsp;&nbsp;&nbsp;&nbsp;compiled with module API=20100525<br/>These options need to match<br/> in Unknown on line 0<br/>PHP Warning:&nbsp;&nbsp;PHP Startup: xhprof: Unable to initialize module<br/>Module compiled with module API=20090626<br/>PHP&nbsp;&nbsp;&nbsp;&nbsp;compiled with module API=20100525<br/>These options need to match<br/> in Unknown on line 0<br/>PHP 5.4.14 (cli) (built: Apr 28 2013 15:16:51) <br/><br/><br/><br/>PHP 5.4 新功能：你應該升級嗎？<br/>期待已久的 PHP 5.4 終於出爐了，這一個版本特別令人期待，原因是它包含了很多原本要等到 PHP 6 才見得到的功能，由於 PHP 6 難產，這些功能便通通帶到 PHP 5.4，所以這次雖然只是升級了一個小版本編號，但包含的改動卻是巨大的，有些甚至會引致兼容性問題，PHP 開發人員不能輕忽視之。本文將會扼要介紹這個新版本的功能，與及討論一下在甚麼情況下你才需要升級到新版本。<br/><br/>PHP 5.4 新功能<br/>Traits<br/>由於 PHP 不支持多重繼承 (multiple inheritance)，這意味著 PHP 不能好像 C++ 那樣創建一個繼承了多個類別的新類別。從 PHP 5 開始類別可以繼承自多個接口 (interface)，這是從 Java 啟發得來的簡單方法，避免了 C++ 因多重繼承而引致的含糊不清的問題。<br/><br/>不過，無論是使用 C++ 方式的多重繼承還是 Java 方式的多接口繼承，都很容易因繼承了太多內容而產生臃腫的類別，它包含的成員函式和變量比真正需要的多得多。<br/><br/>Traits 提供了一個簡單的替代方案，你可以像定義一個類別或接口那樣定義一個 trait，裡面包含了你需要的任何功能，然後你利用它創建一個新的類別。以下是來自 RFC 的一個例子：<br/><br/> PHP &#124; &nbsp;&nbsp;&nbsp;&nbsp; copy code &#124;&nbsp;&nbsp;?&nbsp;&nbsp; <br/>01&nbsp;&nbsp;<br/> &lt;?php<br/>02&nbsp;&nbsp;<br/>trait Hello {<br/>03&nbsp;&nbsp;<br/>&nbsp;&nbsp;public function sayHello() {<br/>04&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &#039;Hello &#039;;<br/>05&nbsp;&nbsp;<br/>&nbsp;&nbsp;}<br/>06&nbsp;&nbsp;<br/>}<br/>07&nbsp;&nbsp;<br/> <br/>08&nbsp;&nbsp;<br/>trait World {<br/>09&nbsp;&nbsp;<br/>&nbsp;&nbsp;public function sayWorld() {<br/>10&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &#039; World&#039;;<br/>11&nbsp;&nbsp;<br/>&nbsp;&nbsp;}<br/>12&nbsp;&nbsp;<br/>}<br/>13&nbsp;&nbsp;<br/> <br/>14&nbsp;&nbsp;<br/>class MyHelloWorld {<br/>15&nbsp;&nbsp;<br/>&nbsp;&nbsp;use Hello, World;<br/>16&nbsp;&nbsp;<br/>}<br/>17&nbsp;&nbsp;<br/> <br/>18&nbsp;&nbsp;<br/>$o = new MyHelloWorld();<br/>19&nbsp;&nbsp;<br/>$o-&gt;sayHello();<br/>20&nbsp;&nbsp;<br/>$o-&gt;sayWorld();<br/>21&nbsp;&nbsp;<br/>// 輸出是 Hello World<br/>內建網站伺服器<br/>雖然 Apache 近年來在高效能網站伺服器的市場沒有以前那麼普及，對於 PHP 開發人員來說它仍然是測試平台上最受歡迎的工具之一，不過很多開發人員只是想安裝 Apache 在一個簡單的開發環境以做測試之用，Apache 過於繁鎖和複雜的配置便變得十分頭疼，所以 PHP 5.4 內建了一個全新編寫的網站伺服器，你只需要執行一個簡單的 PHP 指令便可以啟動一個可用來測試應用程序的伺服器，無須再苦惱怎樣設定 Apache 或任何伺服器。這個內置網站伺服器的另一個有趣的用途，是你可以用它來開發純粹在瀏覽器內運行的應用程式，這時你只需要安裝最基本的 PHP 套件。<br/><br/>以下是啟動 PHP 內建網站伺服器的指令：<br/> $ php -S localhost:8000<br/><br/> Server is listening on localhost:8000... Press CTRL-C to quit.<br/> [Thu Mar&nbsp;&nbsp;3 05:42:06 2011] ::1:56258: /<br/> [Thu Mar&nbsp;&nbsp;3 05:42:06 2011] ::1:56259: /?=PHPE9568F34-A769-00AA02<br/> [Thu Mar&nbsp;&nbsp;3 05:42:06 2011] ::1:56260: /?=PHPE9568F35-A769-00AA04<br/>二進制的整數表達式<br/>當你需要在 PHP 程式碼中表達數字，你可以用十進制、十六進制或八進制，現在 PHP5.4 引進了二進制。<br/><br/>在八進制，你需要前綴 0，例如 010 代表數字 8，而不是 10。在十六進制，你將需要前綴 0x，比如 0X12 表示數字 18。在二進制中，你需要前綴 0B，例如 0b101 表示數字 5。<br/><br/>陣列的簡短語法<br/>隨著 JSON 的普及，它已成為不同編程語言互相交換序列化數據的通用格式，JSON 與 PHP 的數字表達方法最大的差別在於陣列的表達法，JSON 使用方括號，而非 PHP 的 array()，有人建議把 JSON 的語法添加入 PHP，初時許多 PHP 的核心開發成員都不贊成，但許多用戶卻投贊成票，所以現在你可以這樣定義一個陣列：<br/><br/> PHP &#124; &nbsp;&nbsp;&nbsp;&nbsp; copy code &#124;&nbsp;&nbsp;?&nbsp;&nbsp; <br/>1&nbsp;&nbsp;<br/>$a = [1, 2, 3];<br/>2&nbsp;&nbsp;<br/>$b = [&#039;紅色&#039; : &#039;蘋果&#039;, &#039;黃色&#039; :　&#039;檸檬&#039;, &#039;綠色&#039; : &#039;西瓜&#039;];<br/>被取締的功能<br/>每次 PHP 有新版本推出，偶然會有一些功能被取締，尤其是像這次的重要版本更新，通常被取締的功能在之前的版本中已被列為「過時」(deprecated) 的。<br/><br/>首先 PHP 5.4 取締了「魔術引號」(magic quotes) 功能，在之前的 PHP 版本，只要你在 php.ini 配置檔中設定適當的變量，PHP 便會自動替你把某些字符加上「轉義」(escape)，使它們可以直接放入 SQL 語句中，問題是這種做法經常使第三方 PHP 組件變得不可靠，因為這些組件要檢查這項功能是否已經啟用，從而決定是否需要自行轉義這些特殊字符。此外，不同的數據庫有不同的字符需要轉義，所以一套固定的準則不可能適用於所有數據庫，理想的做法是關閉這個功能，由特定的數據庫介面函式來為字符轉義。<br/><br/>PHP 5.4 也取締了 safe_mode 配置，這項配置誤導了無數開發人員，事實上它並不「安全」，也衍生很多問題。<br/><br/>register_long_arrays 也被取締了，這意味著 $HTTP_GET_VARS 等陣列從此不再存在，這項配置在 PHP 5.3 已被列為「過時」，在 PHP 5.4 終於被取締了。<br/><br/>一直被安全專家批評的 register_globals 配置也被取締了 (謝天謝地)，連同 register_long_arrays 的消失，以後大家只能用 $_GET、$_POST 和 $_REQUEST 來讀取表單的數據了。<br/><br/>效能大幅提升<br/>PHP 5.4 在執行速度和記憶體使用量都大幅改進，據其中一名核心開發成員 Ilia Alshanetsky 透露：<br/><br/>在執行一般的應用程式時，速度可提升 5-20%。<br/>執行標準效能測試程式時，速度甚至可提升 15-20%。<br/>對於大部份應用程式，記憶體用量可節省最少 25%。<br/>以上數字無疑是驚人的，必須明白 PHP 5.4 並沒有內建加速器或緩存處理系統 (原來的構思是有的，但後來因來不及整合到編譯器中，所以最後放棄了)，它的效能竟也有如此巨大的進步。<br/><br/>我應否升級到 PHP 5.4？<br/>讀到這裡你可能想知道是否值得升級到 PHP 5.4，PHP Classes 的站長 Manuel Lemos 有一些建議，部份建議是那麼明顯也許並不真正有用，但無論如何可以參考一下。<br/><br/>如果你不需要那些新的功能，不要升級<br/>傳統智慧說永遠不要撤換正在領先的隊伍，如果你看過 PHP 5.4 的功能而沒有看到任何引起你興趣的東西，那又何苦由來升級呢？<br/><br/>如果你堅持要站在科技的最前端，必須要有心理準備由於一些你可能忽略了的改變，你的程式有機會不能在 PHP 5.4 中運作。<br/><br/>如果你仍然需要那些不再受支援的擴展元件，不要升級<br/>如果你需要一些外部擴展元件，而這些擴展元件並未內建於 PHP 5.4 中，很大機會這些擴展元件尚未兼容這個新版本，所以在這些擴展元件升級到與 PHP 5.4 兼容之前，你不宜升級到 PHP 5.4。<br/><br/>給它一點時間<br/>正所謂「新的版本，新的臭蟲」，這意味著 PHP 5.4 很大機會有一些新的臭蟲破壞你的程式，儘管 PHP 5.4 通過無數的測試，在它正式發佈後受到大量開發人員嘗試使用後，很大機會仍能找到臭蟲。比較明顯的臭蟲會很快被修正，所以你不妨稍等一下，也許最少一個月，讓核心開發團隊修正比較重要和明顯的臭蟲。<br/><br/>在你的開發平台進行測試<br/>即使你決定不升級，卻應該在您的開發平台上試用 PHP 5.4。在最壞的情況下，如果它把你的程式搞得一團糟，你隨時可以回復到舊的 PHP 版本而不影響您的用戶，因為只有你或你的團隊才能使用該開發平台。<br/><br/>結論<br/>PHP 5.4 並不算一個重大的 PHP 升級，但對於 PHP 社區來說看到新版本發佈始終是好事，因為它顯示了 PHP 有良好的發展活力。至於你是否會使用這個新版本，那是另一回事。<br/><br/>你又怎麼想呢？你喜歡這個 PHP 版本的新功能嗎？你打算使用它呢？你有不同的標準來決定是否升級嗎？有沒有一些在這篇文章中沒有提及的功能，而你卻認為很有意思？歡迎發表你的看法。<br/>来自：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/
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 发现PHP 5.4.14有如下扩展不兼容，是不是该升级了呢？考虑中。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>