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

PHP 類定義與繼承完整實例:構造函數、魔術方法、可見性、Final 關鍵字

     編輯:PHP 綜合知識

完整類代碼

name = $name;
        $this->age = $age;
    }
    
    // 受保護方法:子類可訪問,外部不可訪問
    protected function getMessage() {
        return "姓名:{$this->name}
年齡:{$this->age}"; } // __toString: 對象作為字符串輸出時自動調用 public function __toString() { return "姓名:{$this->name}
年齡:{$this->age}"; } // __destruct: 對象銷毀時調用 public function __destruct() { echo "
I am dead!"; } // __call: 調用不存在的方法時觸發 public function __call($method, $args) { echo "
調用的方法不存在:$method
"; echo "調用的參數:"; var_dump($args); } // final: 禁止子類覆蓋 final public function getF() { echo "I am getf"; } } // 繼承 class Xinxin extends People { // 覆蓋父類方法 public function getMessage() { return "I am zilei getmessage
"; } // 新增方法 public function getName() { echo $this->getMessage(); // 調用當前類方法 echo parent::getMessage(); // 調用父類方法 return "I am xinxin"; } // 嘗試覆蓋 final 方法會報錯 // public function getF() { echo "I am new getf"; } // Fatal error } // 實例化測試 $pp = new People("小弟", "33"); echo $pp->name . ' ' . $pp->age . "

"; $xx = new Xinxin("小小", "13"); echo $xx->getName(); // 輸出結果: // 姓名:小弟 年齡:33 // // I am zilei getmessage // 姓名:小弟 年齡:33 // I am xinxin // I am dead! // I am dead!

核心概念解析

概念說明示例
構造函數 `__construct`實例化時自動調用,初始化狀態`new People('A', 18)`
解構函數 `__destruct`對象銷毀時調用(腳本結束/引用計數歸零)釋放資源、關閉連接
`__toString`對象當作字符串使用時調用`echo $obj;`
`__call`調用不可訪問方法時觸發(不存在/權限不足)`$obj->undefinedMethod()`
`__callStatic`靜態調用不可訪問方法時觸發 (PHP 5.3+)`Class::undefinedStatic()`
`parent::`訪問父類被覆蓋的方法/屬性`parent::getMessage()`
`final`禁止繼承/覆蓋`final class` / `final function`
可見性public > protected > private子類可訪問 protected

繼承規則總結

  • 子類繼承父類所有 `public`、`protected` 成員
  • 子類**不**繼承父類構造函數(除非未定義自己的)
  • 子類可覆蓋父類方法,但**不可**降低可見性(protected → public 可,public → protected 不可)
  • `final` 方法/類不可被覆蓋/繼承
  • PHP 不支援多重繼承,使用 Trait 實現代碼復用

現代 PHP 最佳實踐

// 1. 類型聲明 (PHP 7.0+)
class People {
    public function __construct(
        public string $name,  // PHP 8.0+ 提升屬性
        public int $age
    ) {}
    
    public function getMessage(): string {
        return "{$this->name} ({$this->age})";
    }
}

// 2. 介面與抽象類定義契約
interface Greetable {
    public function greet(): string;
}

abstract class BasePeople implements Greetable {
    // ...
}

// 3. 嚴格類型模式
declare(strict_types=1);

總結

理解 PHP 物件模型的核心機制(構造/解構、魔術方法、可見性、繼承規則)是編寫健壯 OOP 代碼的基礎。現代 PHP (7.1+) 提供了嚴格類型、返回類型聲明、提升屬性等特性,應盡可能使用以提高代碼質量與 IDE 支援。

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