PHP中的stdClass类是PHP具有动态属性的通用空类,它是PHP中的标准类,此类的对象可以使用 new 运算符实例化,也可以通过类型转换为对象创建。stdClass类没有任何成员变量或方法,它的主要作用是作为一个通用的匿名对象,用于临时存储和传递数据。
一、实例
几个 PHP 函数也会创建此类的实例,比如 json_decode()、mysqli_fetch_object() 或 PDOStatement::fetchObject()。
1、json_decode()函数可以将JSON字符串解码为PHP对象或数组。如果传递给该函数的参数是一个有效的JSON字符串,则它将返回一个stdClass对象的实例。例如:
$json = '{"name":"John","age":30,"city":"New York"}'; $obj = json_decode($json); echo $obj->name; // 输出 "John"
2、mysqli_fetch_object()函数可以从结果集中获取一行作为stdClass对象的实例。例如:
$result = mysqli_query($conn, "SELECT * FROM users"); $row = mysqli_fetch_object($result); echo $row->username; // 输出 "johndoe"
3、PDOStatement::fetchObject()方法可以从结果集中获取一行作为stdClass对象的实例。例如:
$stmt = $pdo->query("SELECT * FROM users"); $row = $stmt->fetchObject(); echo $row->username; // 输出 "johndoe"
尽管没有实现 __get()/__set() 魔术方法,但此类允许动态属性且不需要 #[\AllowDynamicProperties] 属性。
二、类摘要
class stdClass { }
此类没有方法和默认属性。
1、通过类型转换为对象创建
<?php $obj = (object) array('foo' => 'bar'); var_dump($obj);
以上示例会输出:
object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
2、通过 json_decode() 创建
<?php $json = '{"foo":"bar"}'; var_dump(json_decode($json));
以上示例会输出:
object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
3、声明动态属性
<?php $obj = new stdClass(); $obj->foo = 42; $obj->{1} = 42; var_dump($obj);
以上示例会输出:
object(stdClass)#1 (2) { ["foo"]=> int(42) ["1"]=> int(42) }