OOP 三大支柱在 PHP 中的體現
- 封裝:
var 宣告屬性,方法內用 $this->property 存取
- 繼承:
extends 關鍵字實現單繼承
- 多型: 子類別覆寫父類別方法,介面(PHP5)定義契約
基礎類別定義與實例化
<?php
class Something {
var $x; // 屬性無型別限制,賦值時決定型別
function setX($v) { // 方法命名建議:駝峰式,首字母小寫
$this->x = $v;
}
function getX() {
return $this->x;
}
}
// 實例化與使用
$obj = new Something();
$obj->setX(5);
$see = $obj->getX(); // 返回 5
// 不推薦直接存取屬性(破壞封裝)
// $obj->x = 6;
?>
繼承實作
<?php
class Another extends Something {
var $y;
function setY($v) {
$this->y = $v;
}
function getY() {
return $this->y;
}
}
$obj2 = new Another();
$obj2->setX(10); // 繼承自父類別
$obj2->setY(20);
?>
PHP 4/5 關鍵差異與最佳實踐
| 特性 | PHP 4 | PHP 5 | 建議 |
| 建構子 | 同類別名方法 | __construct() | 統一使用 __construct() |
| 解構子 | 不支援 | __destruct() | 資源釋放用 __destruct() |
| 存取控制 | 無(全部 public) | public/protected/private | 嚴格使用 private 保護內部狀態 |
| 物件傳遞 | 值傳遞(複製) | 參考傳遞(預設) | PHP5 免用 & 即為參考 |
| 介面/抽象類 | 不支援 | 完整支援 | 定義契約用 interface、abstract |
編碼規範建議
- 類別名
PascalCase(UserManager),方法 camelCase(getUserById())
- 屬性宣告統一加
var(PHP4 相容)或存取修飾詞(PHP5)
- 嚴禁公開屬性,統一提供
getter/setter
- 大型專案採用自動載入(
spl_autoload_register)替代 require_once