如何在 PHP >= 5.3 严格模式下向对象添加属性而不生成错误

2022-08-30 07:45:15

这必须很简单,但我似乎找不到答案.

我有一个没有属性的泛型stdClass对象。我想向其添加尚未定义的新属性。如果我这样做:$foo$bar

$foo = new StdClass();
$foo->bar = '1234';

严格模式下的 PHP 会抱怨。

向已实例化的对象添加属性的正确方法(在类声明之外)是什么?

注意:我希望该解决方案与 stdClass 类型的泛型 PHP 对象一起使用。

关于这个问题的一些背景知识。我正在解码一个json字符串,它是json对象的数组。 生成一个 StdClass 对象数组。我需要操作这些对象并为每个对象添加一个属性。json_decode()


答案 1

如果你必须将属性添加到对象中,我相信你可以将其转换为数组,添加属性(作为新的数组键),然后将其作为对象转换回去。你遇到对象的唯一时间(我相信)是当你将数组作为对象时,或者当你从头开始创建一个新对象时(当然,当你有什么东西时 - 愚蠢的我忘记了!stdClassstdClassjson_decode()

而不是:

$foo = new StdClass();
$foo->bar = '1234';

你会做的:

$foo = array('bar' => '1234');
$foo = (object)$foo;

或者,如果您已经有一个现有的 stdClass 对象:

$foo = (array)$foo;
$foo['bar'] = '1234';
$foo = (object)$foo;

同样作为 1 衬垫:

$foo = (object) array_merge( (array)$foo, array( 'bar' => '1234' ) );

答案 2

像这样做:

$foo = new stdClass();
$foo->{"bar"} = '1234';

现在尝试:

echo $foo->bar; // should display 1234

推荐