首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在>= 5.3严格模式下向对象添加属性而不产生错误

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

Stack Overflow用户
提问于 2012-07-24 02:32:01
回答 7查看 189.9K关注 0票数 91

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

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

代码语言:javascript
复制
$foo = new StdClass();
$foo->bar = '1234';

PHP在严格模式下抱怨。

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

注意:我希望这个解决方案使用stdClass类型的泛型PHP对象。

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-07-24 02:45:46

如果您一定要将属性添加到对象,我相信您可以将其转换为数组,添加您的属性(作为新的数组键),然后将其转换为对象。唯一一次遇到stdClass对象(我相信)是当您将一个数组转换为一个对象时,或者当您从头创建一个新的stdClass对象时(当然还有当您json_decode()一些东西的时候--我真傻!)。

而不是:

代码语言:javascript
复制
$foo = new StdClass();
$foo->bar = '1234';

你会这样做:

代码语言:javascript
复制
$foo = array('bar' => '1234');
$foo = (object)$foo;

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

代码语言:javascript
复制
$foo = (array)$foo;
$foo['bar'] = '1234';
$foo = (object)$foo;

也可以作为1行代码:

代码语言:javascript
复制
$foo = (object) array_merge( (array)$foo, array( 'bar' => '1234' ) );
票数 144
EN

Stack Overflow用户

发布于 2015-09-15 16:55:01

如下所示:

代码语言:javascript
复制
$foo = new stdClass();
$foo->{"bar"} = '1234';

现在试一试:

代码语言:javascript
复制
echo $foo->bar; // should display 1234
票数 132
EN

Stack Overflow用户

发布于 2012-07-24 02:57:02

如果要编辑解码后的JSON,请尝试将其作为关联数组而不是对象数组。

代码语言:javascript
复制
$data = json_decode($json, TRUE);
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11618349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档