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

PHP 面向對象:static 靜態屬性與方法的記憶體位置深度分析

     編輯:PHP 相關知識

核心論點

static 靜態屬性的記憶體位置在類別中,而非物件實例中。 同理,無論靜態或非靜態方法,程式碼段均位於類別記憶體空間,僅有一份副本。

屬性位置驗證

<?php
header("content-type:text/html;charset=utf-8");

class Human {
    static public $name = "小妹";
    public $height;
    public function tell() {}
}

echo Human::$name; // 類別定義完成即存在,不依賴物件

$p1 = new Human();
$p2 = new Human();
print_r($p1);      // 僅顯示 height 屬性,無 name

$p1::$name = "夫人"; // 透過 p1 修改靜態屬性
echo $p2::$name;   // 輸出「夫人」——p2 同步變化
?>

輸出結果解讀

  1. echo Human::$name 成功:類別載入完成即在類別空間分配靜態屬性,無需實例化。
  2. print_r($p1) 無 name:物件實例內存僅含非靜態屬性(height),靜態屬性不在物件中。
  3. 修改 $p1::$name 後 $p2::$name 同步變化:所有實例共享類別空間中的同一份靜態屬性。

方法位置驗證

同樣建立物件並 print_r($obj),結果不會列出任何方法(無論 static 或非 static),證明方法程式碼同樣位於類別空間,不佔用物件實例記憶體。

總結

成員類型記憶體位置副本數量存取方式
靜態屬性類別空間1 份(全域共享)類別名::屬性名 / 物件::屬性名
非靜態屬性物件實例每實例 1 份$this->屬性名 / $obj->屬性名
靜態方法類別空間(程式碼段)1 份類別名::方法名 / 物件::方法名
非靜態方法類別空間(程式碼段)1 份$this->方法名 / $obj->方法名

理解記憶體模型,即可自然推導出所有存取規則與限制。

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