在 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;