程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP V5遷移指南

PHP V5遷移指南

編輯:PHP綜合

使用 PHP V5 的新語言特性,可以明顯地提高代碼的可維護性和可靠性。通過閱讀本文,您將了解如何利用這些新特性將用 PHP V4 開發的代碼遷移到 PHP V5。

PHP V5 在 PHP V4 基礎上做了重大改進。新語言特性使構建可靠的類庫和維護類庫更加容易。另外,重寫標准庫幫助使 PHP 更符合其同一 Web 語系,例如 Java™ 編程語言。讓我們來看一些 PHP 新的面向對象特性,並了解如何將現有 PHP V4 代碼遷移到 PHP V5。

首先,先來了解新語言特性及 PHP 的創建程序怎樣更改了用 PHP V4 創建對象的方法。用 V5 的想法是要創建一種工業級語言用於 Web 應用程序開發。那意味著要了解 PHP V4 的限制,然後從其他語言中 (例如 Java、C#、C++、Ruby 和 Perl 語言) 抽取已知優秀語言架構並將這些架構並入 PHP 中。

第一個也是最重要的新特性是針對類的方法和實例變量的訪問保護 —— public、protected 和 private 關鍵字。 這個新特性使類設計人員可以保證對類的內在特性的控制,同時告訴類的使用者哪些類可以而哪些類不可以觸及。

在 PHP V4 中,所有代碼都是 public 的。在 PHP V5 中,類設計人員可以聲明哪些代碼是對外部可見的 (public) 而哪些代碼僅對類內部可見 (private) 或僅對類的子類可見 (protected)。如果沒有這些訪問控制,則在大型團隊中開發代碼或將代碼分布為庫的工作會受阻,因為那些類的使用者很可能使用錯誤的方法或訪問應當為 private 成員變量的代碼。

另一個較大的新功能是關鍵字 interface 和 abstract,這兩個關鍵字允許進行契約編程。契約編程 意味著一個類向另一個類提供一張契約 —— 換言之: “這是我要做的工作,你不需要知道它是怎樣完成的”。 實現 interface 的所有類都遵循該契約。interface 的所有使用者都同意僅使用 interface 中指定的方法。abstract 關鍵字使得使用接口十分容易,我稍後將加以說明。

這兩個主要特性 —— 訪問控制和契約編程 —— 允許大型編碼人員團隊更順暢地使用大型代碼庫。這些特性還使 IDE 可以提供更豐富的語言智能特性集。本文不但說明了若干個遷移問題,而且還花了一些時間說明如何使用這些新主要語言特性。

訪問控制

為了演示新語言特性,我使用了一個名為 Configuration 的類。這個簡單的類中含有用於 Web 應用程序的配置項 —— 例如,指向圖片目錄的路徑。在理想的情況下,此信息將駐存在一個文件或數據庫裡。清單 1 顯示了一個簡化的版本。

清單 1. access.php4

<?php
class Configuration
{
 var $_items = array();
 function Configuration() {
  $this->_items[ 'imgpath' ] = 'images';
 }
 function get( $key ) {
  return $this->_items[ $key ];
 }
}
$c = new Configuration();
echo( $c->get( 'imgpath' )."\n" );
?>

這是一個完全正統的 PHP V4 類。成員變量保存配置項的列表,構造程序裝入項,然後名為 get() 的訪問方法返回項的值。

運行腳本後,以下代碼將顯示在命令行中:

% php access.php4
images
%

很好!這個結果意味著代碼運行正常並且正常設定和讀取了 imgpath 配置項的值。

將這個類轉換為 PHP V5 的第一步是要將構造程序重命名。在 PHP V5 中,初始化對象 (構造程序) 的方法稱為 __construct。這次小改動如下所示。

清單 2. access1.php5

<?php
class Configuration
{
 var $_items = array();
 function __construct() {
  $this->_items[ 'imgpath' ] = 'images';
 }
 function get( $key ) {
  return $this->_items[ $key ];
 }
}
$c = new Configuration();
echo( $c->get( 'imgpath' )."\n" );
?>

這次改動並不大。只是移至 PHP V5 約定。下一步是添加對類的訪問控制以確保類的使用者無法直接讀寫 $_items 成員變量。這次改動如下所示。

清單 3. access2.php5

<?php
class Configuration
{
 private $_items = array();
 public function __construct() {
  $this->_items[ 'imgpath' ] = 'images';
 }
 public function get( $key ) {
  return $this->_items[ $key ];
 }
}
$c = new Configuration();
echo( $c->get( 'imgpath' )."\n" );
?>

如果這個對象的使用者都要直接訪問項陣列,訪問將被拒絕,因為該陣列被標記為 private。幸運的是,使用者發現 get() 方法可以提供廣受歡迎的讀取權限。

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