在 PHP8 中,这已更改
https://php.net/manual/en/migration80.incompatible.php
一些警告已转换为错误异常
尝试写入非对象的属性。以前,这会隐式为 null、false 和空字符串创建 stdClass 对象。
因此,如果您向 $var 添加属性,则首先需要将其设为 stdClass()
$var = new stdClass();
$var->propp1 = "nice";
$var->propp2 = 1234;
(PHP 4、PHP 5、PHP 7、PHP 8)
一个具有动态属性的通用空类。
此类的对象可以使用 new 运算符实例化,或通过 强制转换为对象 创建。一些 PHP 函数也会创建此类的实例,例如 json_decode()、mysqli_fetch_object() 或 PDOStatement::fetchObject()。
尽管没有实现 __get()/__set() 魔术方法,但此类允许动态属性,并且不需要 #[\AllowDynamicProperties]
属性。
这不是一个基类,因为 PHP 没有通用基类的概念。但是,可以创建一个从 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) }
在 PHP8 中,这已更改
https://php.net/manual/en/migration80.incompatible.php
一些警告已转换为错误异常
尝试写入非对象的属性。以前,这会隐式为 null、false 和空字符串创建 stdClass 对象。
因此,如果您向 $var 添加属性,则首先需要将其设为 stdClass()
$var = new stdClass();
$var->propp1 = "nice";
$var->propp2 = 1234;