1. 程式人生 > >php5.0到5.6的新特性,開發時應注意版本的相容性

php5.0到5.6的新特性,開發時應注意版本的相容性

php5.0
使用了Zend 2 引擎。
增加完善的面向物件模型
增加了新關鍵字,包括this,try,catch,public,private,protected等
改變strrpos() 和 strripos()使用整個字串作為 needle。
改變array_merge() 只接受陣列
改變非法使用字串偏移量會導致 E_ERROR 而不是 E_WARNING
改變get_class(),get_parent_class()和get_class_methods() 返回的類/方法名和定義時的名字一致(區分大小寫)
改變ip2long() 在傳遞入一個非法 IP 作為引數時返回 FALSE,不再是 -1。
改變函式定義在包含檔案中,則這些函式可以在主檔案中使用而與是否在 return 指令之前還是之後無關
改變include_once 和 require_once 在 Windows 下路徑規格化,因此包含 A.php 和 a.php 只會把檔案包含一次。

php 5.1
重寫了資料處理部分的程式碼
PDO擴充套件預設啟動
效能優化
超過30個新函式
超過400個bug修復

php5.2
CLI SAPI不再從php.ini和php-cli.ini中獲取當前目錄資訊。這是從安全形度考慮的。
增加json支援
對0取模的時候會提示Warning資訊。
物件可以通過__toString()函式被當做字串呼叫。
禁止設定抽象類的靜態方法
增加RFC(data:stream)的支援。

php5.3
不再支援ISAPI
增加了名稱空間的支援.
增加了延遲靜態繫結支援.
增加了閉包及匿名函式支援。
增加了迴圈引用的垃圾回收器並且預設是開啟的.
增加允許動態訪問靜態方法。
增加了 Nowdoc 語法支援, 類似於 Heredoc 語法, 但是包含單引號.就是<<'EOF'這樣的語法。
增加了兩個魔術方法, __callStatic 和 __invoke.
增加魔法常量 __DIR__ 來解決路徑問題
改變__toString 魔術方法不再接受引數
改變魔術方法 get, set, isset, unset, and __call 應該總是公共的(public)且不能是靜態的(static). 方法簽名是必須的.
改變__call 魔術方法在訪問私有的(private)和被保護的(protected)方法時被呼叫.
改變realpath() 現在是完全與平臺無關的. 結果是非法的相對路徑比如 FILE . "/../x" 將不會工作.
call_user_func() 系列函式即使被呼叫者是一個父類也使用 $this.
改變陣列函式 natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip(), 和 array_unique() 將不再接受物件作為引數
改變include(require)_once 解決重複開啟的問題,整體效能提高了 5%-15%
改變md5() 大概提高了 10%-15% 的效能,更好的記憶體處理機制,提高軟體效能的訪問。
改變函式內 include 或者 require 一個檔案時,檔案內 將不能使用 func_get_arg(), func_get_args() 和 func_num_args() 函式
改變HTTP 流包裹器將從 200 到 399 全部的狀態碼都視為成功
改變異常可以被內嵌
改變三元操作符簡寫echo $a ? $a : "No Value"==$a ?: "No Value";
改變使用雙引號宣告 Heredoc, 補充了 Nowdoc 語法.
改變可在類外部使用 const 關鍵詞宣告 常量.

php5.4
不再支援 安全模式 。任何依賴安全模式的應用在安全方面都需要進行調整。
增加支援 traits 。
增加短陣列語法,比如 a=[1,2,3,4];或a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4]; 。
增加支援對函式返回陣列的成員訪問解析,例如 foo()[0] 。
增加 閉包 支援 $this 。
增加不管是否設定 short_open_tag php.ini 選項,<?= 將總是可用。
增加在例項化時訪問類成員,例如: (new Foo)->bar() 。
增加支援 Class::{expr}() 語法。
增加二進位制直接量,例如:0b001001101
增加內建用於開發的 CLI 模式的 web server 。
增加SESSION 擴充套件現在能追蹤檔案的 上傳進度
改變移除魔術引號 。為避免出現安全問題,依賴此特性的應用可能需要升級。 
改變get_magic_quotes_gpc() 和 get_magic_quotes_runtime() 現在總是返回 FALSE 。 
改變php.ini 指令register_globals 和 register_long_arrays 被移除。
改變呼叫時的引用傳遞 被移除。就是不能有f(&$a)這樣的形式
改變break 和 continue 語句不再接受可變引數
改變在日期與時間擴充套件 中,不再支援時區使用 TZ(TimeZone)環境變數設定,必須使用 date.timezone php.ini 配置選項或 date_default_timezone_set()
改變陣列轉換成字串將產生一條 E_NOTICE 級別的錯誤
改變NULL 、FALSE 、或 一個空字串被新增成一個物件的屬性時將發出一條 E_WARNING 級別的錯誤
改變引數名使用全域性變數將會導致一個致命錯誤
改變Salsa10 和 Salsa20 雜湊演算法 被移除
改變當使用兩個空陣列作為引數時,array_combine() 現在返回 array() 而不是 FALSE
改變htmlentities() 將像 htmlspecialchars() 一樣處理亞洲字符集
改變不要再使用 eregi() ,此特性在最新版本中被移除
改變非數字的字串偏移量,比如 a[′foo′]此處a 是一個字串,現在使用 isset() 時返回 false,使用 empty() 時返回 true,
改變解析錯誤資訊和不相容引數的警告

php5.5
已放棄對 Windows XP 和 2003 的支援。需要 Windows Vista 或更新的系統。
增加 Generators,包括yield關鍵字
增加 finally 關鍵字
增加了程式碼的opcache快取
改變pack() 和 unpack()函式
改變移除 PHP logo GUIDs
改變foreach 現在支援 list()
改變empty() 支援傳入一個任意表達式,而不僅是一個變數
改變非變數array和string也能支援下標獲取了
改變類名通過::class可以獲取

php5.6
增加可變引數函式的支援,不再依賴func_get_args()函式,現在可以通過新增的操作符(...)可以把陣列或者可遍歷物件解包到引數列表
增加一個互動式偵錯程式phpdbg
改變const 允許使用包含數字、字串字面值和常量的標量表達式
改變GMP 物件支援操作符過載和轉換為標量
改變採用CryptoPro S-box tables實現了 gost-crypto 雜湊演算法
改變OpenSSL擴充套件新增證書指紋的提取和驗證功能,
改變use 操作符開始支援函式和常量的匯入 use function 和 use const
改變php://input 開始支援多次開啟和讀取,這給處理POST資料的模組的記憶體佔用帶來了極大的改善。