1. 程式人生 > >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可以捕獲致命錯誤