这必须简单,但我似乎无法找到答案....
我有一个$foo没有属性的通用stdClass对象.我想为它添加一个$bar尚未定义的新属性.如果我这样做:
$foo = new StdClass();
$foo->bar = '1234';
Run Code Online (Sandbox Code Playgroud)
PHP在严格模式下抱怨.
在已经实例化的对象中添加属性的正确方法(在类声明之外)是什么?
注意:我希望该解决方案与stdClass类型的通用PHP对象一起使用.
关于这个问题的一点背景.我正在解码一个json字符串,它是一个json对象数组. json_decode()生成一个StdClass对象数组.我需要操纵这些对象并为每个对象添加属性.
Cro*_*tab 105
如果你绝对必须将属性添加到对象,我相信你可以把它作为一个数组,添加你的属性(作为一个新的数组键),然后将其作为一个对象强制转换.你遇到stdClass对象的唯一一次(我相信)就是当你把一个数组作为一个对象或者你stdClass从头开始创建一个新对象时(当然还有json_decode()什么东西 - 愚蠢的我忘了!).
代替:
$foo = new StdClass();
$foo->bar = '1234';
Run Code Online (Sandbox Code Playgroud)
你做的:
$foo = array('bar' => '1234');
$foo = (object)$foo;
Run Code Online (Sandbox Code Playgroud)
或者,如果您已有一个现有的stdClass对象:
$foo = (array)$foo;
$foo['bar'] = '1234';
$foo = (object)$foo;
Run Code Online (Sandbox Code Playgroud)
也作为1班轮:
$foo = (object) array_merge( (array)$foo, array( 'bar' => '1234' ) );
Run Code Online (Sandbox Code Playgroud)
小智 78
像这样做:
$foo = new StdClass();
$foo->{"bar"} = '1234';
Run Code Online (Sandbox Code Playgroud)
现在尝试:
echo $foo->bar; // should display 1234
Run Code Online (Sandbox Code Playgroud)
Roc*_*mat 11
如果要编辑已解码的JSON,请尝试将其作为关联数组而不是对象数组.
$data = json_decode($json, TRUE);
Run Code Online (Sandbox Code Playgroud)
这是另一种方式:
$foo = (object)null; //create an empty object
$foo->bar = "12345";
echo $foo->bar; //12345
Run Code Online (Sandbox Code Playgroud)