這篇文章介紹在 PHP 的物件導向編程(OOP)。我將示範如何用物件導向的概念編出較少的代碼但更好的程式。祝大家好運。
物件導向編程的概念對每一個作者來說都有不同的看法,我提醒一下一個物件導向語言應有的東西:
- 資料抽象和資訊隱藏
- 繼承
- 多態性
在PHP中使用類進行封裝的辦法:
<?php
class Something {
// In OOP classes are usually named starting with a cap letter.
var $x;
function setX($v) {
// Methods start in lowercase then use lowercase to seprate
// words in the method name example getValueOfArea()
$this->x=$v;
}
function getX() {
return $this->x;
}
}
?>
當然你可以用你自己的辦法,但有一個標準總是好的。
PHP 中類的資料成員使用 "var" 定義,資料成員是沒有類型直到被賦值。一個資料成員可能是一個 integer、數組、聯合數組 (associative array) 或甚至對象(object). 方法在類裡定義成函數,在方法裡存取資料成員,你必須使用 $this->name 這樣的辦法,否則對方法來說是一個函數的局部變數。
使用 new 來建立一個對象
$obj = new Something;
然後使用成員函數
$obj->setX(5);
$see = $obj->getX();
setX 成員函數將 5 賦給對象(而不是類)obj 中成員變數, 然後 getX 傳回值 5.
你也可以用對象引用來存取成員變數,例如:$obj->x=6; 然而,這不一種好的物件導向編程的方法。我堅持你應使用成員函數來設定成員變數的值和通過成員函數來讀取成員變數。如果你認為成員變數是不可存取的除了使用成員函數的辦法,你將成為一個好的物件導向程式員。但不幸的是 PHP 本身沒有辦法聲明一個變數是私人的,所以允許糟糕的代碼存在。
在 PHP 中繼承使用 extend 來聲明。
<?php
class Another extends Something {
var $y;
function setY($v) {
// Methods start in lowercase then use lowercase to seperate
// words in the method name example getValueOfArea()
$this->y=$v;
}
function getY() {
return $this->y;
}
}
?>