一个非常奇怪的问题,希望大家看看。1. 首先定义了一个类Categoryclass Category
{
    private $categoryName;
    private $displayText;
    private $createTime;
    private $modifyTime;
    // other properties    // setter and getter
}
2. 然后定义了这样一个函数function createCategory()
{
    $category = new Category();
    $category->setModifyTime(date("Y-m-d H:i:s"));
    $category->setCreateTime(date("Y-m-d H:i:s"));
    $category->setCreatorName("some name");
    
    return $category;
}说明:这里所示的函数实现仅仅是一个示例3. 之后调用json_encode函数,问题就来了$category = createCategory();
echo "{\"state\":\"success\", \"data\":" . json_encode($category) . "}";运行这里的两行代码,输出结果如下:{"state":"success", "data":{}}分明设置了具体的值,为什么json_encode之后什么都没有?
望指点迷津。

解决方案 »

  1.   

     $category->setModifyTime(date("Y-m-d H:i:s"));
        $category->setCreateTime(date("Y-m-d H:i:s"));
        $category->setCreatorName("some name");
    这几个成员函数在哪里定义?具体执行什么操作?你自己没有定义吧?
      

  2.   

    尝试过了,改成public的确正常了,能否解释下为什么是这样,
    而且改成public破坏了类的封装性
      

  3.   

    function __set($name,$value){
       $this->$name = $value ;
     }
      

  4.   

    咕~~(╯﹏╰)b, 原理我自己也说不清,public是给外人看的嘛
    这种小功能用类来解决我觉得杀鸡用大牛刀了,况且所谓完全封装也不能代表就是OOP
      

  5.   

    类成员是私有的。类之外的对象无法访问,当然不能赋值。所以json_encode的结果的空的。改为public即可
      

  6.   

    改为public,只怕过得了自己这一关,也过不了老板那关找到解决方法了
    http://smorgasbork.com/component/content/article/34-web/65-json-encoding-private-class-members谢谢楼上的各位
      

  7.   

    再封装一个public 的结果不就可以了.私有的变量一般不要去动
      

  8.   

    json_encode($array)  这个函数是将数组解释成josn的格式。你已经是这个格式了可以用json_decode反过来才数组......
       
      

  9.   


    正规做法应该是写个__toString()方法