A. 是php5.5版本不對嗎
現如今有運行在php5.5版本環境的ecshop就會發現一些報錯,而且很多空間商也不知道怎麼解決,而這並不是php空間的問題。現在給大家講解一下報錯及解決方法報錯:preg_replace_callback Requires argument 2, 『Array』, to be a valid callback
這個報錯就是提示:第二個參數不能為數組,只是一個回調,該如何解決呢?首先要找到這個調用的地方,如下:
1 return preg_replace_callback($pattern, $replace, $source);
修改為:
1 return preg_replace_callback($pattern,
2 function ($m){
3 return $this->call_back($m[1]);
4 }
5 $source);
再定義「call_back」回調方法,即可
1 function call_back($matches){
2 return $matches[1].($matches[2]+1);
3 }
問題:
1 preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
其中有段代碼:
1 return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source)
此問題是以為php 5.5以上版本拋棄了「preg_replace()」中的 「/e」其實刪除掉「/e」即可解決,如下:
view sourceprint?
1 return preg_replace("/{([^\}\{\n]*)}/","\$this->select('\\1');",
B. php5怎麼樣
2004年7月,PHP5正式版本的發布,標志著一個全新的PHP時代的到來。它的核心是第二代Zend引擎,並引入了對全新的PECL模塊的支持。PHP5的最大特點是引入了面向對象的全部機制,並且保留了向下的兼容性。程序員不必再編寫缺乏功能性的類,並且能夠以多種方法實現類的保護。另外,在對象的集成等方面也不再存在問題。使用PHP5引進了類型提示和異常處理機制,能更有效的處理和避免錯誤的發生。
在不斷更新的同時,PHP5依然保留對舊有的PHP4程序可以運行於PHP5的平台
[PHP5]
PHP5
上而不會出現較大問題。隨著MySQL資料庫的發展,PHP5還綁定了新的MySQLi擴展模塊,它提供了一些更加有效的方法和實用工具用於處理資料庫操作。這些方法大都以面向對象的方式實現,同時也極大地提高了基於資料庫的Web項目的執行速度。
另外,PHP5中還改進了創建動態圖片的功能,目前能夠支持多種圖片格式(如PNG、GIF、TTIF、JPGE等)。PHP5以及內置了對GD2庫的支持,因此安裝GD2庫(主要指UNIX系統中)也不再是件難事,這使得處理圖像十分簡單和高效。
大多數Web程序開發者依然將XML作為一個徹底的簡單資料庫使用。PHP5中也採用了一系列簡單易用、功能強大的方法處理XML文檔。
今天,已經有包括雅虎和亞馬遜等在內的數百萬網站,以及眾多的開發人員和編程愛好者正在使用PHP。從最初的PHP/FI到現在的PHP5,PHP的發展是及其迅猛的,其未來的發展前景也必定令人矚目。
C. 什麼是PHP5
1、PHP語言簡介
PHP是「PHP:Hypertext Preprocessor」的縮寫,即「超文本預處理器」。PHP是一種功能強大,並且簡便易用的腳本語言。
1.1 PHP的發展歷史
PHP是一種簡單、輕便的伺服器端腳本語言。PHP最初是作為一個快速、實用的工具包出現的。1994年,為了在自己的網站上增加一個小巧而實用的訪客追蹤系統,Rasmus Lerdorf編寫了PHP的雛形程序。這是一個用Perl封裝的簡單工具。由於使用效果並不理想,Rasmus又用C語言重寫了這個工具。
後來,更多的人注意到這個輕巧而簡便的程序,並且要求增加更多的功能。Rasmus決定發布一個完整的版本,將其命名為Personal Home Page Tools。後來,Rasmus又發布了一個名為FI的可以做SQL查詢的工具。
1.1.1 PHP2的發展
1996年Rasmus發布了PHP/FI2.0,這是一個基本完善的PHP程序包。它不僅可以訪問資料庫,而且可以嵌入HTML頁面。此時,PHP/FI2.0以及吸引了大量的程序開發人員。在眾多程序員之中,也包括了Zeev Suraski和Andi Gutmans,他們就是後來PHP3的始作者。由於不滿足於PHP/FI在大型項目中的表現,Zeev和Andi作了重大的改進。
1.1.2 PHP3的發展
1998年末,PHP3的第一個官方正式版本發行,其特色是具有更好的執行效果以及更清晰的結構。除此之外,PHP3的強大的功能還在於它的可擴展性。除了給最終用戶提供資料庫、協議和API的基礎結構,它的可擴展性吸引了大量的開發人員加入並提交新的模塊。
這個全新的語言伴隨著一個新的名稱發布。這個名稱更具廣泛意義,而不僅局限於「個人主頁工具」的概念。它被命名為簡單的縮寫「PHP」。這是一種遞歸的縮寫,它的全稱是——PHP:Hypertext Preprocessor。
不久,Zeev Suraski和Andi Gutmans投入到了全新的PHP的開發之中。設計目標是增強程序運行性能和PHP自身代碼的模塊性。
1.1.3 PHP4的發展
新的PHP核心被成為「Zend」(以Zeev和Andi的名字命名)引擎,於2000年5月隨著新版PHP4.0發布。PHP4的性能較PHP3有著顯著的提高。相同的腳本在PHP4中運行,最高可以有近10倍的性能提升。並且Zend提供了的腳本優化器,可以把源程序轉為二進制編譯代碼,提高性能的同時,也保護了程序源碼不被暴露。
在PHP4中增加了對各種Web伺服器(如Apache、IIS/PWS及OmniHTTPd等)的支持。此外,PHP4還增加了一些新的語言特性,如豐富的數組操作函數、完整的會話機制、對輸出緩存的支持等。PHP4也對一些跨平台的技術提供了擴展支持,如對Adobe pdf、SWF、Java、Microsoft.NET等技術的支持。
PHP4還增加了對類於對象的支持。盡管PHP4在這方面並不完善,但還是大大改善了對面向對象程序設計的支持。PHP4中的Pear庫(PHP Extension and Application Repository)就是面向對象的應用與實踐的最好例證。
1.1.4 PHP5的發展
盡管PHP4的發展是如此迅猛,但較之於其他流行的開發語言還是缺乏一些關鍵的功能特性,比如,PHP4中的面向對象功能並不完善,也無法實現異常(Exception)的捕捉與處理。因此在一些特殊問題的處理上還是捉襟見肘的。
2004年7月,PHP5正式版本的發布,標志著一個全新的PHP時代的到來。它的核心是第二代Zend引擎,並引入了對全新的PECL模塊的支持。PHP5的最大特點是引入了面向對象的全部機制,並且保留了向下的兼容性。程序員不必再編寫缺乏功能性的類,並且能夠以多種方法實現類的保護。另外,在對象的集成等方面也不再存在問題。使用PHP5引進了類型提示和異常處理機制,能更有效的處理和避免錯誤的發生。
在不斷更新的同時,PHP5依然保留對舊有的PHP4程序可以運行於PHP5的平台上而不會出現較大問題。隨著MySQL資料庫的發展,PHP5還綁定了新的MySQLi擴展模塊,它提供了一些更加有效的方法和實用工具用於處理資料庫操作。這些方法大都以面向對象的方式實現,同時也極大地提高了基於資料庫的Web項目的執行速度。
另外,PHP5中還改進了創建動態圖片的功能,目前能夠支持多種圖片格式(如PNG、GIF、TTIF、JPGE等)。PHP5以及內置了對GD2庫的支持,因此安裝GD2庫(主要指UNIX系統中)也不再是件難事,這使得處理圖像十分簡單和高效。
大多數Web程序開發者依然將XML作為一個徹底的簡單資料庫使用。PHP5中也採用了一系列簡單易用、功能強大的方法處理XML文檔。
D. PHP5.5 和PHP5.6的區別
PHP5.5 和PHP5.6的區別
摘要:在一個基於Vagrant的本地環境中,可能是某個錯誤的原因,導致HHVM測試結果很差;在HHVM夥伴們協助下,該原因仍在研究中!然而,在DigitalOcean的一個4GB虛擬機中,HHVM甚至蓋過了最新版的PHP-NG的風頭!
結論:它們反映出HHVM的功效更佳(在JIT熱啟動後),雖然出於某些原因,我們不能在所有裝備中獲取這些結果。
如果你記得我們在幾個月前寫過一篇文章,那時WordPress 3.9表明是完全支持HHVM的,當時是那麼令我們歡欣鼓舞。最初的基準測試結果顯示,HHVM要比驅動著當前所有PHP構建的Zend引擎高級得多。後來,問題就出來了:
HHVM只能以單個用戶運行,這意味著(在共享環境中)安全性差了
HHVM在崩潰後不會自動重啟,而不幸的是,它至今仍然經常發生
HHVM在啟動時使用大量內存,雖然,它和同規模的PHP-FPM比較,單個請求的內存使用量更低
很顯然,你不得不根據你的(或者更確切地說是你的站點)的需求採取折中方案,然而這值得嗎?切換到HHVM後,你期望獲得多少性能改善呢?
在Kinsta,我們真的想要測試所有新技術,並通常會優化這一切來為我們的客戶提供最佳的環境。今天,我最終花了點時間來配置測試環境並進行了一些測試來對比兩個不同的構建,一個是全新出爐的WordPress安裝,另外一個則添加了大量內容的WooCommerce!為了計量腳本的運行時間,我只是簡單地添加了
<?php timer_stop(1); ?>
這一行到footer.php的/body標記前。
這里是配置環境的詳情:
DigitalOcean 4GB 雨滴容器 (2 CPU核心, 4GB RAM)
Ubuntu 14.04, MariaDB10
測試站點: 已導入演示內容的Munditia主題,WooCommerce 2.1.12 & WordPress 3.9.1
PHP 5.5.9, PHP 5.5.15, PHP 5.6.0 RC2, PHP-NG (20140718-git-6cc487d)和HHVM 3.2.0 (版本是PHP 5.6.99-hhvm)
沒有進一步大費周章,這些就是我的測試結果,數值越低越好,以秒為單位:
DigitalOcean 4GB 雨滴容器
單位是秒,運行10次,越低越好
看起來似乎PHP-NG在它首次運行後就獲得了峰值性能!HHVM需要更多幾次重載,但是它們的性能貌似差不多!我等不及PHP-NG合並到開發主幹了!:)
一分鍾命中數,越高越好。
PHP 5.5.15禁用OpCache
執行: 236 hits
可用性: 100.00 %
消耗時間: 59.03 secs
傳輸的數據: 2.40 MB
回應時間: 2.47 secs
執行率: 4.00 trans/sec
吞吐量: 0.04 MB/sec
並發數: 9.87
成功的執行: 236
失敗的執行: 0
最長執行: 4.44
最短執行: 0.48
PHP 5.5.15啟用OpCache
執行: 441 hits
可用性: 100.00 %
消耗時間: 59.55 secs
傳輸的數據: 4.48 MB
回應時間: 1.34 secs
執行率: 7.41 trans/sec
吞吐量: 0.08 MB/sec
並發數: 9.91
成功的執行: 441
失敗的執行: 0
最長執行: 2.19
最短執行: 0.64
PHP 5.6 RC2禁用OpCache
執行: 207 hits
可用性: 100.00 %
消耗時間: 59.87 secs
傳輸的數據: 2.10 MB
回應時間: 2.80 secs
執行率: 3.46 trans/sec
吞吐量: 0.04 MB/sec
並發數: 9.68
成功的執行: 207
失敗的執行: 0
最長執行: 3.65
最短執行: 0.54
PHP 5.6 RC2啟用OpCache
執行: 412 hits
可用性: 100.00 %
消耗時間: 59.03 secs
傳輸的數據: 4.18 MB
回應時間: 1.42 secs
執行率: 6.98 trans/sec
吞吐量: 0.07 MB/sec
並發數: 9.88
成功的執行: 412
失敗的執行: 0
最長執行: 1.93
最短執行: 0.34
HHVM 3.2.0(版本是PHP 5.6.99-hhvm)
執行: 955 hits
可用性: 100.00 %
消耗時間: 59.69 secs
傳輸的數據: 9.18 MB
回應時間: 0.62 secs
執行率: 16.00 trans/sec
吞吐量: 0.15 MB/sec
並發數: 9.94
成功的執行: 955
失敗的執行: 0
最長執行: 0.85
最短執行: 0.23
PHP-NG啟用OpCache(構建: Jul 29 2014)
執行: 849 hits
可用性: 100.00 %
消耗時間: 59.88 secs
傳輸的數據: 8.63 MB
回應時間: 0.70 secs
執行率: 14.18 trans/sec
吞吐量: 0.14 MB/sec
並發數: 9.94
成功的執行: 849
失敗的執行: 0
最長執行: 1.06
最短執行: 0.13
E. php5.3.5安裝
IIS7+PHP_5.3.51. 將下載回來的php_5.3.5解壓到 C:\php目錄(也可以放在其他地方,但是後面應該做相應修改) 2. 將php.ini-development改名為php.ini3. 修改php.ini 查找data.timezone 修改為date.timezone = 「Asia/Shanghai」(這里必須改,不然會出警告) 找到Windows Extensions開啟 所需模塊,如:php_curl.dll php_mysql.dll php_mysqli.dll php_xmlrpc.dll php_curl.dll 只要去掉前面的 分號 保存就可以了4. 添加<模塊映射>這里的路徑按你的實際情況填寫.5. 在網站根目錄新建一個phpinfo.php的文本文件 內容為:<?php
phpinfo();
?>6. 測試,打開瀏覽器看結果:localhost/phpinfo.php,如果能看到類似下面的頁面就說明你成功了:好了,到現在 已經可以成功的運行PHP程序了.
F. php 5.3.5如何安裝
從網站下載WINDOWS版本的php壓縮包或安裝包
(如果是安裝包,可以直接安裝,則以下操作基本上可以忽略。但為了更好的安全性,建議採用壓縮包自己安裝配置有關參數)
2. 將下載的php5.0壓縮包解壓到指定位置,如為C:\PHP5
3. 在c:\php5文件夾中,用記事本打開文件php.ini-dist,修改如下內容後「另存為...」php.ini文件
(1)查找到safe_mode = 段落,將safe_mode = Off修改為safe_mode = On
(2)查找到expose_php = On段落,將expose_php = On修改為expose_php = Off
(3)查找到display_errors = On段落,將display_errors = On修改為display_errors = Off
(4)查找到extension_dir = 段落,設置動態庫擴展的路徑,如extension_dir = c:\php5\ext
(5)查找到 ; cgi.force_redirect = 1段落,修改為 cgi.force_redirect = 0
提示:(4)和(5)是必須做的。記著要另存為php.ini
4. 將編輯好的php.ini文件剪切到Windows安裝文件夾下(如:C:\Winnt 或 C:\Windows)
5. 在IIS中,選擇要使用PHP的站點,右鍵菜單中選擇「屬性」,選擇「主目錄」標簽,在該界面中點「配置」,添加或重新編輯php擴展的「應用程序擴展名映射」,可執行文件選擇為C:\php5\php5isapi.dll,擴展名為php,確定應用後退出IIS配置
6. 停止IIS的WEB站點,並重新啟動該站點。
提示:如果是Windows 2003,應增加WEB擴展,將PHP置為允許
G. PHP的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. *構造函數和析構函數 * 對象的引用 * 對象的克隆 * 對象中的私有、公共及受保護模式 * 介面 (Interfaces)
* 抽象類 * __call * __set 和 __get * 靜態成員
構造函數和析構函數
在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,並且在 PHP4 中沒有析構函數的概念。
在 PHP5 中,構造函數被統一命名為 __construct,並且引入了析構函數的概念,被統一命名為 __destruct。
對象的引用
在PHP4中,傳遞變數給一個函數或方法,實際是把這個變數做了一次復制,也就意味著你傳給函數或方法的是這個變數的一個副本,除非你使用了引用符號「&;」 來聲明是要做一個引用,而不是一個 Copy。在 PHP5中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。
對象的克隆
當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎麼辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。
抽象類
抽象類不能被實例化。
抽象類與其它類一樣,允許定義變數及方法。
抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。
__call
PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在的方法,__call 方法將會被自動調用。
__set 和 __get
這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變數和方法。
類型指示
在 PHP5 中,你可以在對象的方法中指明其參數必須為另一個對象的實例。
靜態成員
靜態成員和靜態方法在面象對象編程的術語中被稱作 「類方法(class methods)」 和 「類變數(class variables)」。
「類方法」 在一個對象沒有實例化前允許被調用。同樣,「類變數」 在一個對象沒有實例化前可以被獨立操作控制(不需要用一個對象的方法來控制)。 異常處理是公認的處理程序錯誤的理想方法,在 Java及 C 中都有這個概念,我們欣喜的看到,在 PHP5 已經加入了這方面的應用。你可以嘗試使用 「try」 和 「catch」 來控製程序的錯誤。當有錯誤發生的時候,代碼會把錯誤交給 「catch」 子句來處理,在 「catch」 子句中,你需要指明要把錯誤交給某個對象處理,這樣做可以使代碼結構看起來更清晰,因為我們可以把所有的錯誤信息交給一個對象來處理。
自定義錯誤處理
你可以很方便的用自定義的處理錯誤的代碼來控制你的程序中的意外。你僅僅需要從異常類中派生出一個自己的錯誤控制類,在你自己的錯誤控制類中,你需要有一個構造函數和一個 getMessage 方法。 名稱空間對類的分組或函數分組很有用。它可以把一些相關的類或函數給組合到一起,方便以後調用。
例:名稱空間 <?phpnamespacemy
ame;//參考定義命名空間小節classMyClass{}functionmyfunction(){}constMYCONST=1;$a=newMyClass;$c=newmy
ameMyClass;//參考全局空間小節$a=strlen('hi');//參考使用命名空間:後備全局函數/常量小節$d=namespaceMYCONST;//參考namespace操作符和__NAMESPACE__常量」小節$d=__NAMESPACE__.'MYCONST';echoconstant($d);//參考命名空間和動態語言特徵小節?>注意你需要在何種情況下使用名稱空間,在實際運用中,你可能會需要聲明兩個或多個名稱一樣的對象來做不同的事情,那麼你就可以把他們分別放到不同的名稱空間中去(但介面是要相同的)。 從PHP5.3開始支持ZendGuard加密方式,必須安裝Zend Guard Loader,老的zend optimizer將不被支持。
Linux安裝Zend Guard Loader支持的過程:
操作系統為CentOS5.5,PHP版本為5.3.8(CentOS5.5中的PHP默認版本較低,如果要升級到PHP最新版,可以使用remi的report源進行升級)。
Windows 下面的 Zend Guard Loader 不支持php5.3.8 VC9 x86 Thread Safe而,php5.3.8 VC9 x86 Non Thread Safe 又不支持 apache。所以安裝的話,就需要安裝在iis或者和nginx搭配。
1、下載最新的Linux操作系統系下的Zend Guard Loader。
2、上傳至Linux伺服器並解壓縮,注意閱讀生成目錄下的README文件。全文如下(添加必要的注釋)。在/etc/php.d/目錄下創建文件zend.ini,內容如下: zend_extension=/usr/lib64/php/moles/ZendGuardLoader.so注意路徑一定要寫上,剛開始沒寫路徑,老是載入不上ZendGuardLoader .so,也可以直接將上面的配置寫入/etc/php.ini文件中,效果一樣。
3、重啟httpd服務:service httpd restart。
4.輸出<?php phpinfo(); ?>
PHP 5.5 正式版發布 不再支持 Windows XP
同時 PHP 開發者也提醒用戶,PHP 5.5 也包含一些不向後兼容的內容,包括:不再支持 Windows XP 和 2003 系統;不區分大小寫的匹配函數、類;常數名稱跟 Locale 無關,這對一些使用非 ASCII 代碼的常量名的開發者需要注意的。
H. php5.5 php5.6 哪個好
看你的需要。語言更新知識增加一些新的功能,如果在你的開發過程中,沒需要,並不建議使用,因為新版本可能還不穩定,一般5.3夠用,如果需要支持一些新的特性,建議用心出的版本
I. php 5.3 跟 5.2 有哪些差別
首先你要區分一下,php5.2和5.3的不同,php5.3的一些語法修改較大,非常不同,也就是5.2的一些程序能運行,有可能到了5.3就不能運行了。而php5.3下的程序可能在5.2下也不能運行。
現在最新的版本是5.5,一般用新不用舊的原則。
J. php5.3與5.3以下版本的區別
Namespaces
php 5.3最大的改動,毫無疑問就是Namespaces(此前有一篇相關的PHP Namespaces FAQ)。這給php開發人員帶來的好處不少,廣為人們所詬病的函數命名問題也得到了解決。代碼更清晰
5.3之前常見的代碼,需要自定義前綴區分函數和類名PLAIN TEXTCODE:function MY_wrapper() {}
class MY_DB { }
define('MY_CONN_STR', '');
MY_wrapper();
new MY_DB();
MY_CONN_STR;
使用名稱空間之後,代碼看上去更加clean。PLAIN TEXTCODE:namespace MY;
function wrapper() {}
class DB { }
const CONN_STR = '';
use MY AS MY;
wrapper();
new DB();
CONN_STR;
一個文件中定義了多個namespace
如果一個文件中定義了多個namespace,應該怎樣處理?PLAIN TEXTCODE:namespace LIB;
class MySQL {}
class SQLite {}
$b = new SQLite();
namespace LIB_EXTRA;
class MScrypt {}
$a = new MScrypt();
var_mp(
get_class($a),
get_class($b)
);
以上代碼輸出為:PLAIN TEXTCODE:string(18)"LIB_EXTRA::MScrypt"
string(11)"LIB::SQLite"
php是解釋執行的語言,以上結果合情合理。namespace的優先順序
namespace中定義的函數,類和常量優先,其次才是全局的。PLAIN TEXTCODE:namespace foo;
function strlen($foo) { return htmlentities($foo); }
echo strlen("test"); // test
echo ::strlen("test"); // 4
echo namespace::strlen("test"); // test
namespace和autoload的友情
autoload會根據namespace名稱以及class名稱來解析類文件位置
僅當namespace和全局范圍都沒找到class定義的情況下,autoload才會被觸發
在namespace中定義的__autoload不會被自動調用
PLAIN TEXT
CODE:
function __autoload($var) { var_mp($var); } // LIB::foo
require "./ns.php"; /*
<?php
namespace LIB;
new foo();
*/
namespace一些輔料
PLAIN TEXTCODE:namespace really::long::pointlessly::verbose::ns;
__NAMESPACE__; // 新增的魔法常量,表示當前namespace名稱
class a{}
get_class(new a()); // really::long::pointlessly::verbose::ns::a
use really::long::pointlessly::verbose::ns::a AS b;// 從名稱空間中引用一個類
註:這里的內容節選自pdfIntroction to PHP 5.3 Slides,後文不再復述。性能提升
php 5.3的總體性能提升了5 - 15%md5()快了10-15%
Better stack implementation in the engine
Constants移到read-only內存里
exception處理過程改進(簡化,opcodes更少)
(require/include)_once改進,去掉重復open
Smaller binary size & startup size with gcc4
新語言特性__DIR__
在5.3以前,為了獲得當前腳本的目錄,需要一次函數調用PLAIN TEXTCODE:echo dirname(__FILE__); // < PHP 5.3
在5.3,只需要一個魔術常量__DIR__就解決了。PLAIN TEXTCODE:echo __DIR__; // >= PHP 5.3
?:操作符
便捷的?:操作符,可以從兩個值/表達式中快速取得非空值。PLAIN TEXTCODE:$a = true ?: false; // true
$a = false ?: true; // true
$a = "" ?: 1; // 1
$a = 0 ?: 2; // 2
$a = array() ?: array(1); // array(1);
$a = strlen("") ?: strlen("a"); // 1
__callStatic()
新增了魔術方法__callStatic,功能和__call類似,但是僅對static方法有效。PLAIN TEXTCODE:class helper {
static function __callStatic($name, $args) {
echo $name.'('.implode(',', $args).')';
}
}
helper::test("foo","bar"); // test(foo,bar)
動態調用static方法
動態的調用靜態方法?動靜結合。PLAIN TEXTCODE:class helper {
static function foo() { echo __METHOD__; }
}
$a = "helper";
$b = "foo";
$a::$b(); // helper::foo
Late Static Binding
不知道怎麼譯,可能留個原文更容易理解。靜態方法的事件處理時機有變化,以前是在編譯期處理,現在是執行期間處理。在php 5.3之前,下面的代碼會輸出一個A,但是這不是咱們要的,whoami方法已經在class B中重新定義,它本該輸出B才符合咱們想當然的思維。PLAIN TEXTCODE:class A {
public static function whoami() {
echo __CLASS__;
}
public static function identity() {
self::whoami();
}
}
class B extends A {
public static function whoami() {
echo __CLASS__;
}
}
B::identity(); // A <-- PHP <5.3
下面代碼中使用了static::whoami()來調用靜態方法。php 5.3之後,由於__CLASS__是在執行期被處理,那麼這個例子中能順利抓到class B。PLAIN TEXTCODE:class A {
public static function whoami() {
echo __CLASS__;
}
public static function identity() {
static::whoami();
}
}
class B extends A {
public static function whoami() {
echo __CLASS__;
}
}
B::identity(); // B <-->= PHP 5.3
mysqlnd
見mysqlnd成為php 5.3中的默認mysql驅動但是PDO_MySQL暫時還不支持mysqlnd,目前只有mysql(i)擴展可以用到之前介紹的php 5.3的新特性,都是方便開發人員的東東。下面介紹個很討虛擬主機提供商喜歡的特性。增強的ini文件支持
CGI/ FastCGI支持類似.htaccess的INI配置
每個目錄下都可以有INI設置,ini的文件名取決於php.ini的配置,但是[PATH=/var/www/domain.com], [HOST=www.domain.com]段落的設置用戶不能修改。
增強的error handling
允許在ini文件中定義變數和常量,可以在程序中直接調用。
附上一段ini文件的例子PLAIN TEXTCODE:#用戶自定義的php.ini文件名(.htaccess). 默認是".user.ini"
user_ini.filename=".user.ini"
#如果要禁用這個特性,設置為空值即可
user_ini.filename=
#用戶自定義的php.ini文件TTL時長(time-to-live),單位為秒,我理解為緩存過期時間。默認為300秒
user_ini.cache_ttl=300
[PATH=/var/www/domain.com]
variables_order = GPC
safe_mode =1
[my variables]
somevar = 「1234」
anothervar = ${somevar}; anothervar == somevar
[ini arrays]
foo[bar]=1
foo[123]=2
foo[]=3