【发布时间】:2018-07-16 16:08:30
【问题描述】:
我有一个基类,它使用 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”),但不会获取私有属性(即“ _状态”) 这是序列化函数:
public function jsonSerialize() {
$json = array();
foreach($this as $key => $value) {
$json[$key] = $value;
}
return $json;
}
上述基类中的方法有没有什么办法可以识别子类中的所有Getter,以便将它们包含在序列化中? 换句话说,我希望序列化同时包含“id”和“status”
我意识到我可以获取类上的所有方法并使用某种命名约定来标识 getter/setter,但我特别需要保持 getter/setter 名称与属性名称相同,即 _status 必须有一个 getter setter 调用 status() 那么还有其他方法可以识别这些特定功能吗?
【问题讨论】:
-
在stackoverflow上阅读post。
-
FWIW,如果那是你的实际二传手,你不应该使用它。它什么也没做。只需创建属性
public并分配给它。 -
谢谢。它不是我的实际二传手。我的实际设置器正在设置一些其他属性。
标签: php getter-setter private-members json-serialization