我希望我的所有对象都能够返回自己的JSON字符串。PHP:如何从基础对象的方法访问子属性?
所以我创造了我所有的对象扩展的基类,有一个AsJSON()方法:
class BaseObject { public function AsJSON() { $JSON=array(); foreach ($this as $key => $value) { if(is_null($value)) continue; $JSON[$key] = $value; } return json_encode($JSON); } }
然后我的子类的扩展:
class Package extends BaseObject { ... }
所以在我的代码中,我期望这样做:
$Box = new Package; $Box->SetID('123'); $Box->SetName('12x8x6'); $Box->SetBoxX('12'); $Box->SetBoxY('8'); $Box->SetBoxZ('6'); echo $Box->AsJSON();
但是它返回的JSON字符串只包含BaseClass的属性,而不是子属性。
如何修改我的AsJSON()函数,以便$ this引用孩子的属性,而不是父级的?
为什么一定要BaseClass的在首位的方法?使用get_object_vars()或reflection可以在另一个类/方法/函数中实现它。这样你就可以轻松地在JSON/BSON/XML/YAML /其他之间切换。 – VolkerK 2010-05-22 08:34:31
因为这些属性是私人的,并且不在课堂以外访问。通常,这些属性是通过$ Object-> GetSomething()来访问的。而不是直接访问该属性。 – Nick 2010-05-22 09:19:42