明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

使用OOP技術來優(yōu)化PHP應用程序

[摘要]大多數(shù)開發(fā)者認為面相對象的程序設計(OOP)思想和PHP是一對矛盾,但實際上,PHP封裝了開發(fā)者在其應用程序中使用OOP技術的所有功能。為了證明這一點,讓我們舉一個經典的Vehicle(車輛)例子,其PHP類如下:class Vehicle // Stuff goes here!在我們新建的...
大多數(shù)開發(fā)者認為面相對象的程序設計(OOP)思想和PHP是一對矛盾,但實際上,PHP封裝了開發(fā)者在其應用程序中使用OOP技術的所有功能。為了證明這一點,讓我們舉一個經典的Vehicle(車輛)例子,其PHP類如下:
class Vehicle {
   // Stuff goes here!
}

在我們新建的Vehicle類中,用方法(即PHP函數(shù))來聯(lián)系我們的應用程序和Vehicle類的特性(characteristics)。每一個方法都是用來向應用程序描述Vehicle,這樣我們用方法來實現(xiàn)某些功能。請考慮下面的例子(它顯然是非函數(shù)的,即沒有給出函數(shù)體):
class Vehicle {
   function getWheels() {
      // 邏輯上用來查詢這里的車輪(即wheel)數(shù)
      return($wheels);
}
   function getDoors() {
      // 邏輯上用來查詢這里的車門(即door)數(shù)。
return($wheels);
}
}


這里,我們看到了兩個“getter”函數(shù)。如果這看起來、聽起來很熟悉的話,那是因為PHP的OOP與C或者Java非常相似的緣故。真正的挑戰(zhàn)是靈活的使用OOP、充分而又有效的使用封裝。

為了確定在把Vehicle集成到你的應用程序這一過程中你需要懂得哪些內容,定義組成Vehicle的基本元素或許會有所幫助。例如,Vehicles可以按照車門的數(shù)目或者車輪的數(shù)目來組織。

如果我們想知道我們的Vehicle有多少個輪子,我們需要返回這一信息的函數(shù)。在PHP中,這一函數(shù)的實現(xiàn)可以如代碼清單A所示。

現(xiàn)在我們的Vehicle類包含了一個叫著getWheels的方法了,當應用程序傳遞給它一個車輛類型時,它返回輪子的數(shù)目。那么,我們如何把車輛類型這一信息傳遞給Vehicle類呢?為了更好的理解這一問題,讓我們演示一下用法,實現(xiàn)我們的類并調用它的getWheels方法來得到car類型車輛的車輪數(shù)目。
// 設置車輛種類
$vehicle = "car";

這樣我們已經宣布了我們想創(chuàng)建的車輛類型為car。由于我們使用PHP,因此這個值可以是動態(tài)的,但如果這樣的話很快就會難以用代碼來處理(hard-code)它了。

為了使用這個類,我們首先需要在應用程序中創(chuàng)建該類的一個實例:
// 創(chuàng)建car類的一個新實例
$myVehicle = &new Vehicle;


我們剛剛創(chuàng)建了一個叫著myVehicle的Vehicle類的實例。它是Vehicle類的唯一實例,而且它包含了Vehicle所包含的所有數(shù)據(jù)(方法和屬性)。

現(xiàn)在是找出我們的car到底有多少個輪子的時候了:
// 通過向getWheels方法傳遞車輛類型來獲取車輪數(shù)目
$numWheels = $myVehicle->getWheels($vehicle);

正如你所見,我們調用了getWheel方法并向它傳遞了車輛種類。如果一切順利的話,我們就得到了我們所需的數(shù)據(jù):
// 打印車輪數(shù)目
print "$vehicle has $numWheels wheels.";


如果我們想得到車門數(shù)目,我們需要編寫另一個檢查車門數(shù)的方法,如代碼清單B所示。

易于編程、易于管理

正如你在這個簡單的演示中所看到的那樣,在PHP中實現(xiàn)面相對象的編程并不困難。像我們在Vehicle類中那樣采用OOP和類,創(chuàng)建一個購物車(shopping cart)并不會非常麻煩。由于采用了面向對象的編程思想,代碼易讀、易維護、易升級。

清單C給出了我們在這里所討論汽車分類應用程序的更高版本的代碼。它充分演示了PHP的面相對象性能。