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

PHP 面向對象程式設計(OOP)核心概念與代碼實戰

     編輯:PHP 相關知識

為什麼選擇 OOP?

  • 模組化/可維護性: 將實體封裝為類,修改內部實現不影響外部調用。
  • 可擴充性: 通過繼承快速擴展功能。
  • 代碼復用: 類庫可在多專案間共享。
  • 團隊協作: 適合大中型專案多人並行開發。

類的定義與實例化

<?php
class User {
    // 屬性(成員變量)
    public $name = 'Guest';
    public $age = 0;

    // 構造函數:創建對象時自動調用
    public function __construct($name = '', $age = 0) {
        $this->name = $name;
        $this->age = $age;
    }

    // 方法(成員函數)
    public function greet() {
        echo "Hello, I'm {$this->name}, {$this->age} years old.
"; } } // 實例化 $user1 = new User('Alice', 25); $user1->greet(); // 輸出: Hello, I'm Alice, 25 years old. // 修改屬性 $user1->age = 26; $user1->greet(); ?>

可見性控制

關鍵字訪問範圍
public任何位置(類內、子類、外部)
protected類內 + 子類
private僅本類內部

範例:private 與 protected

class Base {
    private $secret = 'private';
    protected $family = 'protected';
    public $open = 'public';

    public function show() {
        echo $this->secret; // 類內可訪問 private
    }
}

class Child extends Base {
    public function test() {
        // echo $this->secret; // ❌ Fatal error
        echo $this->family;   // ✅ 子類可訪問 protected
        echo $this->open;     // ✅
    }
}

封裝與魔術方法

通過 __get()、__set()、__isset()、__unset() 實現對不可見屬性的攔截,常用於代理、延遲加載等場景。

class Container {
    private $data = [];

    public function __set($key, $value) {
        $this->data[$key] = $value;
    }
    public function __get($key) {
        return $this->data[$key] ?? null;
    }
    public function __isset($key) {
        return isset($this->data[$key]);
    }
    public function __unset($key) {
        unset($this->data[$key]);
    }
}

$c = new Container();
$c->name = 'Bob';      // 觸發 __set
echo $c->name;         // 觸發 __get
unset($c->name);       // 觸發 __unset

繼承與構造函數鏈

PHP 不會自動調用父類構造函數,子類需顯式呼叫 parent::__construct()。

class Animal {
    public function __construct(public $species) {
        echo "Animal created: {$species}
"; } } class Dog extends Animal { public function __construct(public $name) { parent::__construct('Dog'); // 必須顯式調用 echo "Dog named {$name}
"; } } $dog = new Dog('Lucky');

多態性示例

interface Drawable {
    public function draw();
}

class Circle implements Drawable {
    public function draw() { echo "Drawing a circle
"; } } class Square implements Drawable { public function draw() { echo "Drawing a square
"; } } function render(Drawable $shape) { $shape->draw(); // 根據實際對象類型執行不同邏輯 } render(new Circle()); // Drawing a circle render(new Square()); // Drawing a square

舊式寫法提醒

PHP 4 風格使用 var 定義屬性、類名作為構造函數名,已不推薦。請統一使用 public/protected/private + __construct()。

總結

掌握類的定義、可見性、構造函數、繼承、多態及魔術方法,即可編寫結構清晰、可維護的 PHP OOP 代碼。進階可學習介面、抽象類、Trait、依賴注入等模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved