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

PHP 5 物件導向核心筆記(三):類定義、屬性聲明、方法與 Type Hint

     編輯:PHP 綜合知識

前言

PHP 5 類定義語法包含屬性、方法、常數、存取控制、靜態成員與型別提示。本節系統整理類結構組成、屬性聲明細節、方法定義規則、Type Hint 機制與實戰範例。

1. 類基本結構

class ClassName extends ParentClass {
    // 屬性聲明
    public $publicProp;
    private $privateProp;
    protected $protectedProp;
    static $staticProp;

    // 常數
    const CLASS_CONST = 'value';

    // 方法聲明
    public function methodName(TypeHint $param) { ... }
    static function staticMethod() { ... }
}

大括號內**僅能聲明屬性、方法、常數**,不可執行任意代碼。

2. 屬性聲明細節

特性說明
無型別聲明PHP 為動態語言,屬性型別由賦值決定(整數、字串、物件、資源等)
建議加註釋/** @var string $name 用戶名稱 */ 供 IDE 與靜態分析工具使用
同一可視性可合行private $password, $lastLogin;
靜態屬性static $count = 0; 類級共享,透過 self::$count 存取
常數const PI = 3.14; 類級常數,透過 ClassName::PI 或 self::PI 存取

3. 方法定義規則

  • 語法與函數相同,但**擁有獨立命名空間**——類內可定義與全域函數同名方法(如 date())不衝突。
  • **不可使用 PHP 關鍵字**作為方法名(for、while、echo 等)。
  • $this 偽變數:僅在物件上下文中可用,指向當前實例,**方法內區域變數不自動指向屬性**,必須顯式 $this->prop。

4. 存取控制修飾符

※ PHP 4 僅有 var(相當於 public),PHP 5 引入三級可視性,大幅強化封裝性。

5. Type Hint(型別提示)

在方法參數前指定**類名**(或介面名),強制呼叫者傳遞該類型實例:

class Widget {
    public $name = 'none';
    public $created = false;
}

class Assembler {
    // 參數必須是 Widget 實例
    public function make(Widget $w) {
        echo "Making {$w->name}<br>";
        $w->created = true;
    }
}

$thing = new Widget();
$thing->name = 'Gadget';
Assembler::make($thing); // 正確

// Assembler::make('not an object'); // 致命錯誤:Argument must be instance of Widget
  • **僅支援類/介面型別**,**不支援**標量型別(int、string、bool、array 等)——PHP 7.0+ 才引入標量型別宣告。
  • 陣列型別提示在 PHP 5.1+ 以 array 關鍵字支援(有爭議,文檔標註)。
  • 違反時拋出 Catchable Fatal Error,可被 set_error_handler 捕獲轉為異常。

6. 實戰範例:User 類完整定義

<?php
class User {
    // 屬性
    public $name;
    private $password, $lastLogin;
    static $accessCount = 0;

    // 建構子
    public function __construct($name, $password) {
        $this->name = $name;
        $this->password = $password;
        $this->lastLogin = time();
        self::$accessCount++;
    }

    // 方法
    public function getLastLogin() {
        return date('M d Y', $this->lastLogin);
    }
}

// 使用
$user = new User('Leon', 'sdf123');
echo $user->getLastLogin() . "<br>"; // 如: Jul 15 2024
echo $user->name . "<br>";           // Leon
?>

7. 進階:靜態成員與延遲靜態綁定

  • self::$staticProp / self::staticMethod():綁定**定義時的類**(早期綁定)。
  • static::$staticProp / static::staticMethod():PHP 5.3+ **延遲靜態綁定**,綁定**實際呼叫的類**(晚期綁定),解決繼承中靜態成員多態問題。

總結

PHP 5 類定義核心在於:**屬性無型別但建議註釋、方法擁有獨立命名空間、三級存取控制強化封裝、Type Hint 提供執行時型別檢查(類/介面)**。掌握這些語法細節,是編寫可維護、可擴展物件導向代碼的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
修飾符屬性/方法可存取範圍
public任何位置
protected本類、子類、父類
private**僅本類**(子類不可見,PHP 4 無此修飾符)