我希望我的所有對象都能夠返回自己的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