代码之家  ›  专栏  ›  技术社区  ›  One Crayon

对象转换为字符串中的PHP数组(据我所知)

  •  0
  • One Crayon  · 技术社区  · 16 年前

    我正在为一个web应用程序开发前端代码,但在使用自定义对象时遇到了一个奇怪的问题。当我请求对象并使用 print_r() 我明白了(对象要大得多;只需将其剪切到相关代码):

    MemberInfo Object
    (
        [meta_data] => Array
        (
            [email_recommendations] => true
            [email_updates] => false
        )
    )
    

    $memberInfo->meta_data['email_recommendations'] = 'false'; updateMember($memberInfo); )。但是,一旦我更改了对象属性值 列印

    MemberInfo Object
    (
        [meta_data] => {\"email_recommendations\":\"false\",\"email_updates\":\"false\"}
    
    )
    

    我肯定我忽略了一些非常愚蠢的事情;有人知道我应该找什么吗?我检查了,后端代码没有通过引用传递(函数调用是 updateMember(MemberInfo $memberInfo);

    我不期望进行深入的调试;我只需要知道我应该寻找的一般方向,是什么导致了一个属性的这种变化,所有权利都应该是一个数组。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Owen Ryan Doherty    16 年前

    那么,您在调用后是否正在使用该对象 updateMember() ? 默认情况下,PHP5对象是通过引用传递的,因此如果调用 json_encode() meta_data

    函数进行确认,但听起来就是这样。

    即:

    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"