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

PHP 方法覆寫與單一繼承機制完整指南

     編輯:PHP 相關知識

PHP 無傳統方法多載,改用覆寫機制

PHP 為弱型別語言,參數不固定、型別不嚴格,故不支援傳統「方法多載」(同名不同參數)。但在繼承體系中,子類別可「覆寫」父類別同名方法實現擴展。

方法覆寫核心概念與實作

<?php
class Person {
    public $name, $sex, $age;
    
    public function __construct($name, $sex, $age) {
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
    }
    
    public function say() {
        echo "我是 {$this->name},{$this->sex},{$this->age} 歲";
    }
}

class Student extends Person {
    public $school;
    
    // 覆寫父類別建構子,並呼叫父建構子
    public function __construct($name, $sex, $age, $school) {
        parent::__construct($name, $sex, $age);  // 推薦使用 parent::
        $this->school = $school;
    }
    
    // 覆寫 say() 並擴展功能
    public function say() {
        parent::say();  // 保留父類別功能
        echo ",就讀於 {$this->school}";
    }
    
    public function study() {
        echo "{$this->name} 正在 {$this->school} 讀書";
    }
}

$stu = new Student("小明", "男", 18, "某大學");
$stu->say();   // 我是小明,男,18歲,就讀於某大學
$stu->study(); // 小明正在某大學讀書
?>

呼叫父類別被覆寫方法的兩種方式

方式語法優缺點
類別名稱Person::say()硬編碼父類別名稱,重構時需同步修改
parent::(推薦)parent::say()解耦父類別名稱,繼承樹調整只需改 extends

單一繼承機制深度解析

PHP 採單一繼承:一個類別僅能直接繼承一個父類別。透過 extends 關鍵字實現:

<?php
// 基礎類別
class Person {
    public $name, $age;
    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }
    public function walk() { echo "走路中..."; }
}

// 衍生類別:擴展而非重寫
class Student extends Person {
    public $school;
    public function __construct($name, $age, $school) {
        parent::__construct($name, $age);
        $this->school = $school;
    }
    public function study() { echo "在 {$this->school} 讀書"; }
}

// 繼承鏈
class GraduateStudent extends Student {
    public $thesis;
    public function research() { echo "研究 {$this->thesis} 中"; }
}
?>

繼承的三大效益

  1. 程式碼重用:子類別自動擁有父類別非 private 成員
  2. 擴展性:新增功能不修改既有程式碼(開放封閉原則)
  3. 多型基礎:父類別型別參考可指向子類別實例

建構子繼承規則

  • 子類別未定義建構子 → 自動繼承父類別建構子
  • 子類別定義建構子 → 覆寫父建構子,需手動呼叫 parent::__construct()
  • 析構子同理:子類別定義則覆寫,需手動呼叫 parent::__destruct()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved