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

PHP 物件導向核心概念總結:$this、$parent、self

     編輯:PHP 相關知識

PHP 物件導向核心概念總結:$this、$parent、self

雖然接觸 PHP 較久,但在基礎 OOP 概念上仍易混淆。本文系統整理屬性定義、存取方式,以及 $this、parent::、self:: 的適用場景與差異。

1. 類別屬性定義與存取方式

class TestClass {
    const T_CONST = 1;
    public $tVar = 2;
    static $tSta = 3;

    public function __construct() {
        echo $this->T_CONST;   // 無輸出
        echo self::T_CONST;    // 輸出 1
        echo $this->tVar;      // 輸出 2
        echo self::$tVar;      // 錯誤:存取靜態屬性需加 $
        echo self::tVar;       // 錯誤:視為常數
        echo $this->tSta;      // 無輸出
        echo self::$tSta;      // 輸出 3
    }
}
$obj = new TestClass();

總結:

  • 常數(const)與靜態屬性(static)必須用 :: 存取,搭配 self:: 或 ClassName::。
  • 非靜態屬性/方法用 -> 存取,搭配 $this->。
  • 類別內部存取靜態/常數用 self::,存取實例屬性/方法用 $this->。

2. $this 指向何處?

$this 永遠指向當前實例化的物件。繼承鏈中,若子類別未覆寫方法,$this->method() 會往父類別尋找,找到即停止,不會繼續往上找。

class Base { public function testFunc() { echo "I'm boss"; } }
class ParentClass extends Base { public function testFunc() { echo "I'm the up"; } }
class Child extends ParentClass {
    public function display() { $this->testFunc(); }
}
$obj = new Child();
$obj->display(); // 輸出 "I'm the up"

3. parent:: 父類別引用

  • 只能存取直接父類別的 public 或 protected 成員。
  • 父類別的非靜態屬性仍需用 $this->prop 存取;若為靜態屬性則用 parent::$prop。
  • 不具傳遞性:無法透過 parent:: 存取祖父類別的成員。

4. self:: 類別本身引用

self:: 綁定於定義它的類別,不隨實例化物件改變。常用於靜態屬性/方法、常數。

class Counter {
    public static $count = 0;
    public $num = 0;
    public function __construct() {
        self::$count++; $this->num++;
    }
    public function display() { echo self::$count . "\n" . $this->num . "\n"; }
}
$o1 = new Counter(); $o1->display(); // 1, 1
$o2 = new Counter(); $o2->display(); // 2, 1

5. 快速對照表

關鍵字指向適用對象
$this->當前實例非靜態屬性/方法
parent::直接父類別父類別的靜態/常數/方法
self::目前類別定義處靜態屬性/常數/靜態方法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved