2013-05-11 55 views
0

我有一个抽象类,它实现了JsonSerializable接口。获取抽象类中的对象变量

版本1:

abstract class MyBase implements JsonSerializable 
{ 
    public function jsonSerialize() 
    { 
     var_dump(get_object_vars($this)); 
     // ... 
    } 
} 

class MyClass extends MyBase 
{ 
    private $id; 
    private $name; 
} 

所以json_encode(new MyClass())返回一个空数组:

阵列(0){}

版本2:

abstract class MyBase implements JsonSerializable 
{ 
    abstract public function jsonSerialize(); 
} 

class MyClass extends MyBase 
{ 
    private $id; 
    private $name; 

    public function jsonSerialize() 
    { 
     var_dump(get_object_vars($this)); 
     // ... 
    } 
} 

所以json_encode(new MyClass())返回类似的数组:

阵列(12){[ “ID”] => INT(1)[ “名称”] =>串(1) “名”}

为什么我的解决方案1不能像我的解决方案2那样工作?

回答

2

因为属性是私人的!

var_dump(get_object_vars($this));将从该上下文中获取您的属性。

私人会员只能从他们在其中定义的类访问

+0

哦,我记得...... – David 2013-05-11 21:16:53