PHP中的stdClass類是PHP具有動(dòng)態(tài)屬性的通用空類,它是PHP中的標(biāo)準(zhǔn)類,此類的對(duì)象可以使用 new 運(yùn)算符實(shí)例化,也可以通過(guò)類型轉(zhuǎn)換為對(duì)象創(chuàng)建。stdClass類沒(méi)有任何成員變量或方法,它的主要作用是作為一個(gè)通用的匿名對(duì)象,用于臨時(shí)存儲(chǔ)和傳遞數(shù)據(jù)。
一、實(shí)例
幾個(gè) PHP 函數(shù)也會(huì)創(chuàng)建此類的實(shí)例,比如 json_decode()、mysqli_fetch_object() 或 PDOStatement::fetchObject()。
1、json_decode()函數(shù)可以將JSON字符串解碼為PHP對(duì)象或數(shù)組。如果傳遞給該函數(shù)的參數(shù)是一個(gè)有效的JSON字符串,則它將返回一個(gè)stdClass對(duì)象的實(shí)例。例如:
$json = '{"name":"John","age":30,"city":"New York"}'; $obj = json_decode($json); echo $obj->name; // 輸出 "John"
2、mysqli_fetch_object()函數(shù)可以從結(jié)果集中獲取一行作為stdClass對(duì)象的實(shí)例。例如:
$result = mysqli_query($conn, "SELECT * FROM users"); $row = mysqli_fetch_object($result); echo $row->username; // 輸出 "johndoe"
3、PDOStatement::fetchObject()方法可以從結(jié)果集中獲取一行作為stdClass對(duì)象的實(shí)例。例如:
$stmt = $pdo->query("SELECT * FROM users"); $row = $stmt->fetchObject(); echo $row->username; // 輸出 "johndoe"
盡管沒(méi)有實(shí)現(xiàn) __get()/__set() 魔術(shù)方法,但此類允許動(dòng)態(tài)屬性且不需要 #[\AllowDynamicProperties] 屬性。
二、類摘要
class stdClass { }
此類沒(méi)有方法和默認(rèn)屬性。
1、通過(guò)類型轉(zhuǎn)換為對(duì)象創(chuàng)建
<?php $obj = (object) array('foo' => 'bar'); var_dump($obj);
以上示例會(huì)輸出:
object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
2、通過(guò) json_decode() 創(chuàng)建
<?php $json = '{"foo":"bar"}'; var_dump(json_decode($json));
以上示例會(huì)輸出:
object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
3、聲明動(dòng)態(tài)屬性
<?php $obj = new stdClass(); $obj->foo = 42; $obj->{1} = 42; var_dump($obj);
以上示例會(huì)輸出:
object(stdClass)#1 (2) { ["foo"]=> int(42) ["1"]=> int(42) }