我正在为Web应用程序开发前端代码,并且遇到了一个自定义对象的奇怪问题。当我请求对象并使用print_r()
时,我得到了这个(对象更大;只需将其剪切为相关代码):
MemberInfo Object
(
[meta_data] => Array
(
[email_recommendations] => true
[email_updates] => false
)
)
要更改MemberInfo对象中的某些内容,我只需更新其属性并使用第二个函数将其发送回后端。因此,例如,页面加载一次(这给我们上面显示的对象),然后我发送一个POST请求,其中包含页面第二次加载的更改。在第二次加载期间,我获取上面的对象,根据POST使用类似$memberInfo->meta_data['email_recommendations'] = 'false';
的内容设置一个字段,然后使用该版本的对象在运行更新函数后填充页面(类似于{ {1}})。但是,一旦我更改了对象属性值updateMember($memberInfo);
,就会向我显示不同的内容:
print_r()
我确定我忽略了一些非常愚蠢的事情;有没有人知道我应该寻找什么?我检查了,后端代码没有通过引用传递(函数调用是MemberInfo Object
(
[meta_data] => {\"email_recommendations\":\"false\",\"email_updates\":\"false\"}
)
)但是我对PHP 5对象处理有点不稳定所以我不确定可能出现什么问题。< / p>
我不希望深入调试;我只需要知道我应该寻找的一般方向是什么导致了所有权利应该是数组的属性中的这种变化。
提前致谢!
答案 0 :(得分:1)
你在调用updateMember()
后使用该对象吗?默认情况下,PHP5对象通过引用传递,因此如果您在json_encode()
属性上调用meta_data
,它将展示您描述的行为。
您可能希望发布updateMember()
功能进行确认,但听起来就是这样。
即:
class MemberInfo {
function __construct() {
$this->meta_data = array(
'email_recommendations' => true,
'email_updates' => false,
);
}
}
function updateMember($meminfo) {
$meminfo->meta_data = json_encode($meminfo->meta_data);
// do stuff
}
$meminfo = new MemberInfo();
updateMember($meminfo);
print_r($meminfo); // you'll see the json encoded value for "meta_data"