json_decode($json, false))。<?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 等其他內建類別
}
無父類別、無介面、無屬性、無方法,純粹作為動態屬性容器。
class MyClass extends stdClass {} // 語法合法,但無實質意義
// 子類別仍無預設方法,僅繼承「無特徵」特性
strlen 等內建函數的角色。instanceof stdClass 僅對 new stdClass、(object)array、json_decode 回傳為 true。