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

PHP5 stdClass 內部保留類完整解析:並非所有類別的基類

     編輯:PHP 綜合知識

stdClass 定義

  • PHP 內建保留類別,無任何屬性與方法,所有魔術方法為 null。
  • 可實例化,用於將資料轉為物件(如 json_decode($json, false))。
  • 不是 所有類別的基類(PHP 無統一基類)。

驗證非基類

<?php
class Foo {}
$bar = new Foo();
var_dump($bar instanceof stdClass); // bool(false)

class CTest { public $property1; }
$t = new CTest;
var_dump($t instanceof stdClass); // bool(false)
var_dump(is_subclass_of($t, 'stdClass')); // bool(false)
echo get_class($t); // 'CTest'
echo get_parent_class($t); // false

常見用法

<?php
// 1. 強制轉換
$obj = (object) ['name' => 'Tom', 'age' => 20];
// $obj 為 stdClass 實例,可 $obj->name 存取

// 2. json_decode 預設回傳
$json = '{"id":1,"title":"PHP"}';
$data = json_decode($json); // stdClass 物件

// 3. 動態屬性容器
$config = new stdClass();
$config->db_host = 'localhost';
$config->debug = true;

源碼層面

Zend 引擎啟動時註冊:

ZEND_MINIT_FUNCTION(core) {
    zend_class_entry ce;
    INIT_CLASS_ENTRY(ce, "stdClass", NULL); // 無方法表
    zend_standard_class_def = zend_register_internal_class(&ce);
    // ... 註冊 Exception、SPL 等其他內建類別
}

無父類別、無介面、無屬性、無方法,純粹作為動態屬性容器。

繼承 stdClass?

class MyClass extends stdClass {} // 語法合法,但無實質意義
// 子類別仍無預設方法,僅繼承「無特徵」特性

總結

  • stdClass = 內建保留類別,類似 strlen 等內建函數的角色。
  • 非基類,instanceof stdClass 僅對 new stdClass、(object)array、json_decode 回傳為 true。
  • 主要用途:無需定義類別即可建立物件承載資料。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved