PHP各版本迭代
注:部分引用《php版本歷史》
php5.3
改動:
1、realpath() 現在是完全與平臺無關的. 結果是非法的相對路徑比如FILE. "/../x" 將不會工作.
2、call_user_func() 系列函數即使被調用者是一個父類也使用 $this.
3、數組函數 natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip(), 和 array_unique() 將不再接受對象作為參數. 在將這些函數應用于對象時, 請首先將對象轉換為數組.
4、按引用傳遞參數的函數在被按值傳遞調用時行為發生改變. 此前函數將接受按值傳遞的參數, 現在將拋出致命錯誤. 之前任何期待傳遞引用但是在調用時傳遞了常量或者字面值 的函數, 需要在調用前改為將該值賦給一個變量。
5、__toString 魔術方法不再接受參數.
6、魔術方法get,set,isset,unset, and __call 應該總是公共的(public)且不能是靜態的(static). 方法簽名是必須的.
7、現在 __call 魔術方法在訪問私有的(private)和被保護的(protected)方法時被調用.
8、函數內 include 或者 require 一個文件時,文件內 將不能使用 func_get_arg(), func_get_args() 和 func_num_args() 函數。
9、goto,namespace關鍵詞被保留。
新功能:
1、添加了命名空間的支持.
2、添加了靜態晚綁定支持.
3、增加了goto支持。
4、增加了閉包支持。
5、新增了兩個魔術方法,callStatic 和invoke.
6、添加了 Nowdoc 語法支持, 類似于 Heredoc 語法, 但是包含單引號.就是<<'EOF'這樣的語法。
7、可使用雙引號聲明 Heredoc, 補充了 Nowdoc 語法.
8、可在類外部使用 const 關鍵詞聲明 常量.
9、三元運算操作符有了簡寫形式: ?:.
10、HTTP 流包裹器將從 200 到 399 全部的狀態碼都視為成功。
11、允許動態訪問靜態方法。
12、異常可以被內嵌
13、新增了循環引用的垃圾回收器并且默認是開啟的.
14、mail() 現在支持郵件發送日志. (注意: 僅支持通過該函數發送的郵件.)
php5.4
改動:
1、不再支持 安全模式 。任何依賴安全模式的應用在安全方面都需要進行調整。
2、移除 魔術引號 。為避免出現安全問題,依賴此特性的應用可能需要升級。 get_magic_quotes_gpc() 和 get_magic_quotes_runtime() 現在總是返回 FALSE 。 調用 set_magic_quotes_runtime() 將產生一個 E_CORE_ERROR 級別的錯誤。
3、register_globals 和 register_long_arrays php.ini 指令被移除。
4、調用時的引用傳遞 被移除。就是不能有f(&$a)這樣的形式。
5、break 和 continue 語句不再接受可變參數( 比如: break 1 + foo() * $bar; )。像類似 break 2; 這樣的固定參數仍可使用。受此變化影響,不再允許出現 break 0; 和 continue 0; 。
6、在 日期與時間擴展 中,不再支持時區使用 TZ(TimeZone)環境變量設置。必須使用 date.timezone php.ini 配置選項或 date_default_timezone_set() 函數來指定時區。PHP 將不再嘗試猜測時區,而是回退到“UTC”并發出一條 E_WARNING 錯誤。
7、非數字的字符串偏移量,比如a[′foo′]此處a 是一個字符串,現在使用 isset() 時返回 false,使用 empty() 時返回 true,并產生一條 E_WARNING 錯誤。偏移量類型是布爾和 null 則產生一條 E_NOTICE 錯誤。 數字字符串(比如a[′2′])仍像以前一樣運行。注意像類似′12.3′和′5foobar′這樣的偏移量將被視為非數字并產生一條EWARNING錯誤,但因為向后兼容的原因它們會被分別轉換成12和5。注意:下列代碼返回不同的結果。str='abc';var_dump(isset($str['x'])); // 在 PHP 5.4 或更新版本返回 false,但在 PHP 5.3 或更低版本返回 true
8、數組轉換成字符串將產生一條 E_NOTICE 級別的錯誤,但返回的結果仍是字符串 "Array" 。
9、NULL 、FALSE 、或 一個空字符串被添加成一個對象的屬性時將發出一條 E_WARNING 級別的錯誤,而不是 E_STRICT 。
10、現在參數名使用全局變量將會導致一個致命錯誤。禁止類似 function foo($GET, $POST) {} 這樣的代碼。
11、Salsa10 和 Salsa20 哈希算法 被移除。
12、當使用兩個空數組作為參數時, array_combine() 現在返回 array() 而不是 FALSE 。
13、htmlentities() 將像 htmlspecialchars() 一樣處理亞洲字符集,這是以前 PHP 版本的處理情況,但現在將會發出一條 E_STRICT 錯誤。
14、強烈建議不要再使用 eregi() ,此特性在最新版本中被移除。
15、trait,callable,insteadof關鍵詞被保留。
新特性:
1、新增支持 traits 。
2、新增短數組語法,比如a=[1,2,3,4];或a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4]; 。
3、新增支持對函數返回數組的成員訪問解析,例如 foo()[0] 。
4、現在 閉包 支持 $this 。
5、現在不管是否設置 short_open_tag php.ini 選項,
6、新增在實例化時訪問類成員,例如: (new Foo)->bar() 。
7、現在支持 Class::{expr}() 語法。
8、新增二進制直接量,例如:0b001001101
9、改進解析錯誤信息和不兼容參數的警告。
10、SESSION 擴展現在能追蹤文件的 上傳進度 。
11、內置用于開發的 CLI 模式的 web server 。
php5.5
改動:
1、已放棄對 Windows XP 和 2003 的支持。構建 Windows 版本的 PHP 需要 Windows Vista 或更新的系統。
2、pack() 和 unpack() 函數的變化
3、移除 PHP logo GUIDs
新特性:
1、新增 Generators,包括yield關鍵字
2、新增 finally 關鍵字
3、foreach 現在支持 list()
4、empty() 現在支持傳入一個任意表達式,而不僅是一個變量。
5、非變量array和string也能支持下標獲取了
6、類名通過::class可以獲取
7、增加了opcache擴展
php5.6
改動:
暫時還沒整理
新特性:
1、PHP常量支持表達式,包括數學運算、字符串處理等,可以被當作函數的輸入參數
2、新增通過...語法定義可變參函數,代替func_get_args()折中實現方法
3、數組和可轉換對象被當作函數參數時,可以通過...語法實現自動解包元素,就像其他語言比如Ruby一樣的功能。
4、新增求冪運算符**,該運算符的結合方向是向左結合。
5、use語法可以用來引用函數、變量,除了類之外
6、PHP新增了調試模塊phpdbg,通過SAPI模塊的方式實現調試功能
7、配置項default_charset定義htmlentities()、html_entity_decode()、htmlspecialchars()函數使用編碼,默認為utf-8
8、php://input支持多次讀取
9、支持超過2G大文件上傳
10、新增魔術方法__debugInfo()
11、pgsql支持異步操作
php 7.0.0
改動:
暫無
新特性:
1、性能大幅提升
2、函數參數、返回值增加了變量類型的限定
3、try{}catch可以捕獲致命錯誤
作者:Joeyjoey
鏈接:http://www.jianshu.com/p/0e8bc65b4cce
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
- 上一篇: php性能优化和细节优化
- 下一篇: 怎么在大白菜安装正版win7系统 大白菜