这必须很简单,但我似乎找不到答案……
我有一个没有属性的通用stdClass对象$foo
。我想向其中添加一个尚未定义的新属性$bar
。如果我这样做:
$foo = new StdClass();
$foo->bar = '1234';
PHP在严格模式下抱怨。
向已实例化的对象添加属性的正确方法(在类声明之外)是什么?
注意:我希望这个解决方案使用stdClass类型的泛型PHP对象。
关于这个问题的一些背景知识。我正在解码一个json字符串,它是一个json对象数组。json_decode()
生成一个StdClass对象数组。我需要操作这些对象,并为每个对象添加一个属性。
发布于 2012-07-24 02:45:46
如果您一定要将属性添加到对象,我相信您可以将其转换为数组,添加您的属性(作为新的数组键),然后将其转换为对象。唯一一次遇到stdClass
对象(我相信)是当您将一个数组转换为一个对象时,或者当您从头创建一个新的stdClass
对象时(当然还有当您json_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' ) );
发布于 2015-09-15 16:55:01
如下所示:
$foo = new stdClass();
$foo->{"bar"} = '1234';
现在试一试:
echo $foo->bar; // should display 1234
发布于 2012-07-24 02:57:02
如果要编辑解码后的JSON,请尝试将其作为关联数组而不是对象数组。
$data = json_decode($json, TRUE);
https://stackoverflow.com/questions/11618349
复制相似问题