物件導向程式設計(OOP)透過將資料與行為封裝於「物件」中,實現程式碼重用與模組化。PHP 4 已具備基本 OOP 支援,PHP 5+ 大幅增強物件模型。本文系統整理 PHP 類別定義、實例化、繼承等核心語法與實務應用。
<?php
// 類別命名:PascalCase(首字母大寫)
class Student {
// 屬性聲明:var 關鍵字(PHP 4 風格)
var $str_Name; // 姓名
var $str_Sex; // 性別
var $int_Id; // 學號
var $int_English; // 英文成績
var $int_Maths; // 數學成績
// 方法定義:camelCase(駝峰式)
function Input($Name, $Sex, $Id, $English, $Maths) {
$this->str_Name = $Name;
$this->str_Sex = $Sex;
$this->int_Id = $Id;
$this->int_English = $English;
$this->int_Maths = $Maths;
}
function ShowInfo() {
echo "姓名:{$this->str_Name}
";
echo "性別:{$this->str_Sex}
";
echo "學號:{$this->int_Id}
";
echo "英文成績:{$this->int_English}
";
echo "數學成績:{$this->int_Maths}
";
}
}
?>
使用 new 關鍵字建立物件實例:
<?php
// 建立兩個學生物件
$wing = new Student();
$wing->Input("Wing", "男", 33, 95, 87);
$paladin = new Student();
$paladin->Input("Paladin", "女", 38, 58, 59.5);
// 呼叫方法顯示資訊
$wing->ShowInfo();
$paladin->ShowInfo();
?>
輸出結果:
姓名:Wing 性別:男 學號:33 英文成績:95 數學成績:87 姓名:Paladin 性別:女 學號:38 英文成績:58 數學成績:59.5
在類別方法中,$this 代表目前物件實例。存取屬性或呼叫方法必須使用 $this->property 或 $this->method(),否則會被視為區域變數。
PHP 4 使用與類別同名的方法作為建構子:
<?php
class Student {
function Student($name, $sex, $id) {
$this->str_Name = $name;
$this->str_Sex = $sex;
$this->int_Id = $id;
}
}
// 實例化時自動呼叫建構子
$student = new Student("John", "男", 101);
?>
PHP 5+ 建議使用 __construct(),支援方法多載模擬。
<?php
class GraduateStudent extends Student {
var $thesisTopic;
function setThesis($topic) {
$this->thesisTopic = $topic;
}
// 覆寫父類別方法
function ShowInfo() {
parent::ShowInfo(); // 呼叫父類別方法
echo "論文主題:{$this->thesisTopic}
";
}
}
?>
| 特性 | PHP 4 | PHP 5+ |
|---|---|---|
| 物件傳遞 | 值傳遞(複製) | 參考傳遞(handle) |
| 建構子 | 同名方法 | __construct() |
| 解構子 | 不支援 | __destruct() |
| 存取控制 | 僅 var(public) | public/protected/private |
| 靜態成員 | 不支援 | 支援 static |
| 介面/抽象類別 | 不支援 | 完整支援 |
| 物件複製 | 自動複製 | 需用 clone |
private,提供公有 getter/setterdeclare(strict_types=1))self:: vs $this->、static:: 延遲靜態綁定__sleep()/__wakeup() 控制序列化行為掌握 PHP 類別與物件導向核心觀念,是開發可維護、可擴展應用程式的基石。建議從簡單類別設計練習起步,逐步引入設計模式(Factory、Strategy、Repository 等),並持續關注 PHP 新版本特性(如 PHP 8 的屬性提升建構子、readonly 屬性等)提升開發效率。