我有一个基类,它使用 php 魔术方法 __get 和 __set 能够修改扩展类中的私有属性。然后我为相关的私有属性构建了 setter getter 函数(类似于在这里找到的 http://www.beaconfire-red.com/epic-stuff/better-getters-and-setters-php )
所以我的子类将如下所示:
class User extends BaseObject {
public $id = -1;
private $_status = "";
function __construct($members = array()) {
parent::__construct($members);
}
//Setter/Getter
public function status($value = null) {
if($value) {
$this->_status = $value;
} else {
return $this->_status;
}
}
现在,当我在基类中序列化这个作为 JsonSerialize 方法的对象时,序列化只会从子类中获取公共属性(即“Id”),但不会获取私有属性(即“_status”)这是序列化函数:
public function jsonSerialize() {
$json = array();
foreach($this as $key => $value) {
$json[$key] = $value;
}
return $json;
}
基类中的上述方法有什么方法可以识别子类中的所有Getter,以便它们可以包含在序列化中?换句话说,我希望序列化同时包含“id”和“status”
我意识到我可以获取类上的所有方法并使用某种命名约定来标识 getter/setter,但我特别需要保持 getter/setter 名称与属性名称相同,即 _status 必须有一个名为 status 的 getter setter () 那么还有其他方法可以识别这些特定功能吗?