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

深入 PHP 原始碼探究 stdClass 類別:並非所有類別的基類

     編輯:PHP 綜合知識

stdClass 真相:從 Zend 引擎原始碼看內部實現

許多開發者誤以為 stdClass 是所有類別的基類,實際上它只是 PHP 核心保留的一個「空」類別,沒有任何屬性與方法,專門用於動態屬性掛載。

原始碼證據

在 Zend/zend_builtin_functions.c 的模組初始化函數中:

ZEND_MINIT_FUNCTION(core) {
    zend_class_entry class_entry;
    /* 註冊 stdClass 類別 */
    INIT_CLASS_ENTRY(class_entry, "stdClass", NULL);
    zend_standard_class_def = zend_register_internal_class(&class_entry TSRMLS_CC);
    /* 註冊預設類別、介面如 Exception、SPL 類別等 */
    zend_register_default_classes(TSRMLS_C);
    return SUCCESS;
}

可見 INIT_CLASS_ENTRY 的方法表傳入 NULL,表示無任何成員方法、魔術方法、父類別或介面皆設為 NULL。

實測驗證

class EmptyClass {}
$object = new EmptyClass();
var_dump($object instanceof stdClass); // 輸出 bool(false)

結果證明自訂類別並不繼承 stdClass。

適用場景

  • 快速建立匿名物件:$obj = new stdClass(); $obj->foo = 'bar';
  • JSON 解碼為物件:json_decode($json, false) 預設回傳 stdClass 實例
  • 動態屬性容器,但無法呼叫任何方法

結論

stdClass 是內部保留類別,初始化時無屬性、無方法、所有魔術方法為 NULL,可被繼承但無實質意義,核心用途是提供一個「即刻可用」的物件容器。

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