程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 5.4語法改進與棄用特性

PHP 5.4語法改進與棄用特性

編輯:關於PHP編程

PHP 5.4於本月塵埃落定,它是 PHP 自 2009 年以來的首次重大更新。該版本對語言部分進行了增強,包括支持 Traits 和移除部分爭議特性。

Traits

同 Java 和 .NET 一樣,PHP 使用單一繼承模型。雖然這種模型足夠應付大部分用例場景,但有時用戶也需要將一些通用樣板代碼放置其他無關聯的類中。(.NET 的 Dispose 方法就是這類樣板代碼(boiler-plate code)中一個很好的例子。)為解決這樣的問題,PHP5.4推出了 Traits。

Traits 是一個方案集合,它不屬於任何實際類。用戶沒法創建 Trait 實例或直接調用 Trait 中的方法,相反,用戶必須將 Traits 合並到實際的類當中方能使用它們。在優先級方面,Trait 方法會覆蓋繼承而來的同名方法,而當前合並類中的同名方法則會覆蓋 Trait 方法。

Traits 之間擁有相同的優先級,因此默認情況下,將兩個包含重疊方法名的 Traits 加入到相同類中是個錯誤的做法。當然,使用“insteadof”和“as”操作符可以手工解決沖突,從而避免這個錯誤。此外,“as”操作符還可以用於改變 Trait 的可見性(visibility)。

Traits 中的方法可以是抽象方法,用於支持 Traits 的部分泛化;同時,Traits 也可以對外暴露靜態變量,每個包含 Traits 的類都將擁有該變量的一份拷貝。此外,在 Traits 中已經聲明過的屬性不可以再在包含它的類中聲明。

其他語法改進

其他語法改進包括:

  • 數組現在可以使用方括號進行聲明,而不再需要使用“array”函數。新的聲明方式除了略微簡潔之外,沒有其他影響;
  • 現在可以直接對函數返回值進行數組取值。在此之前,函數返回值的結果必須先存入一個臨時變量中,如:$FirstName = GetNames ()<0>;
  • PHP 5.4 中的閉包現在可以使用“$this”指針,這在以前是不可以的;
  • 現在可以在實例化時訪問類成員,如: (new CustomerService)->Delete (customerId);
  • 采用“0b”前綴標識二進制數。

命令行 Web 服務器

PHP 5.4 提供了自己的 Web 服務器,你可以從命令行中啟動它。該 Web 服務器的設計目的僅在於幫助開發,它不會取代你的生產 Web 服務器。

棄用特性

備受指責的 Register Globals 已從 PHP 中完全刪除。十年來,該特性一直以其頻繁發生的安全漏洞而著稱。2002年該特性被設置為默認關閉。2009年發布的 PHP5.3 將該特性標記為“棄用”,想必從那時起,大部分開發人員已經不再使用它。

從 PHP 中移除的另一個不討喜的特性是 Magic Quotes。Magic Quotes 本意是對字符串進行自動轉義(escape)以試圖避免 SQL 注入攻擊。但是由於字符串的轉義使用方法常與特定背景相關,因此,比起試圖解決的問題,它反而造成了更多的問題。該特性同 Register Globals 一樣,也在 2009 年被標記為“棄用”。

PHP 中的 break 和 continue 語句之後可以跟上一個參數用來指明跳出的循環層數。如果不指定參數,它會像 VB、C#或 Java 一樣跳出最內層的循環。在 PHP 5.4 之前,開發人員可以向 break 語句傳遞一個變量,而現在只能傳遞常量。

PHP 允許參數按引用傳遞。在早期版本中,你可以通過為調用點添加修飾來指明變量按引用傳遞。在 PHP 5.4 中,該選項已被移除。相反,現代 PHP 編程只需要在函數聲明時指定按引用傳遞即可。與 C# 不同,你不需要同時在聲明和調用點指定按引用傳遞。

查看英文原文:http://www.infoq.com/news/2012/03/PHP-5.4

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved