首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 面向對象程式設計 (OOP) 入門:類、物件、$this、建構子與繼承基礎

     編輯:PHP 綜合知識

PHP 5 起完整支援物件導向程式設計。本教學以「桌子」為隱喻,由淺入深講解類別定義、成員屬性/方法、實例化、$this 指標、建構子與參數化建構,適合從程序式思維轉向 OOP 的開發者。

1. 類別:同類事物的藍圖

<?php
class Desk {
    // 成員屬性 (特徵)
    public $surfaceArea; // 桌面大小
    public $legCount;    // 桌腳數量

    // 成員方法 (行為)
    public function move() {
        echo "桌子移動中...<br>";
    }
    public function enlargeSurface() {
        $this->surfaceArea++;
        echo "桌面放大至 {$this->surfaceArea}<br>";
    }
}
?>

2. 實例化:從藍圖產出具體物件

$myDesk = new Desk();      // 建立實例
$myDesk->surfaceArea = 100; // 設定屬性
$myDesk->enlargeSurface();  // 呼叫方法:輸出 "桌面放大至 101"
$yourDesk = new Desk();     // 另一個獨立實例
$yourDesk->surfaceArea = 80;
// $myDesk 與 $yourDesk 互不干擾

3. $this:當前物件的參考

  • 在類別內部,$this 代表「正在執行此方法的那個具體實例」。
  • $myDesk->enlargeSurface() 執行時,方法內的 $this 即指向 $myDesk。
  • 靜態方法 (static) 中不可用 $this (無實例上下文)。

4. 建構子 __construct():初始化儀式

PHP 5 推薦使用 __construct() (雙底線);舊式同名方法 (如 function Desk()) 在 PHP 7+ 已棄用、PHP 8 移除。

class Desk {
    public $surfaceArea;
    public $legCount;

    public function __construct(int $area = 100, int $legs = 4) {
        $this->surfaceArea = $area;
        $this->legCount = $legs;
        echo "新桌子誕生:面積 {$area}、腳數 {$legs}<br>";
    }

    public function enlargeSurface() {
        $this->surfaceArea++;
    }
}

$desk1 = new Desk();        // 使用預設值 100, 4
$desk2 = new Desk(120, 6);  // 自訂初始值
// 建構子在 new 瞬間自動執行,無需手動呼叫

5. 可視性與封裝

良好實踐:屬性預設 private,透過 getter/setter 控制存取與驗證。

6. 繼承:擴充與複用

class ComputerDesk extends Desk {
    public $hasCableManagement = true;

    public function __construct($area = 100, $legs = 4) {
        parent::__construct($area, $legs); // 呼叫父類建構子
        echo "電腦桌額外功能:線材管理<br>";
    }

    public function manageCables() {
        echo "整理線材中...<br>";
    }
}

$pcDesk = new ComputerDesk(150);
$pcDesk->enlargeSurface();   // 繼承自父類
$pcDesk->manageCables();     // 子類專有

7. 實用進階觀念 (輕輕帶過)

  • 解構子 __destruct():物件銷毀前自動執行 (釋放資源、關閉連線)。
  • 靜態成員 static:屬於類別而非實例,Desk::$count++。
  • 介面 interface:定義契約,類別 implements 實作。
  • 抽象類別 abstract class:不可實例化,含抽象方法強制子類實作。
  • Trait:橫向複用程式碼片段 (PHP 5.4+)。
  • 魔術方法:__call、__get、__set、__toString、__invoke 等攔截特定操作。
  • 型別宣告與回傳型別 (PHP 7+):function add(int $a, int $b): int。
  • 命名空間 namespace + PSR-4 自動載入:現代專案結構基石。

從程序式思維轉向 OOP 的關鍵

  1. 識別「名詞」→ 類別,「動詞」→ 方法,「形容詞」→ 屬性。
  2. 封裝細節,對外暴露意圖清晰的介面。
  3. 善用繼承與多型消除重複代碼,但「組合優於繼承」。
  4. 依賴介面而非具體實現,便於測試與替換。

OOP 非銀彈,但能讓大型專案結構清晰、可維護、可擴展。從小專案練習開始,逐步內化物件思維。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
關鍵字存取範圍
public任意處存取
protected類別內部 + 子類別
private僅類別內部