使用PHP,我如何定义/声明getter和setter方法/函数作为类中属性声明的一部分?
我要做的是将getter和setter方法指定为属性的一部分,而不是声明单独的set_propertyName($value)
和get_propertyName()
函数/方法。
我得到了什么:
class my_entity {
protected $is_new;
protected $eid; // entity ID for an existing entity
public function __construct($is_new = FALSE, $eid = 0) {
$this->is_new = $is_new;
if ($eid > 0) {
$this->set_eid($eid);
}
}
// setter method
public function set_eid($eid) {
$is_set = FALSE;
if (is_numeric($eid)) {
$this->eid = intval($eid);
$is_set = TRUE;
}
return $is_set;
}
}
我想要什么(没有制作$ this-> eid一个对象):
class my_entity {
protected $is_new;
// entity ID for an existing entity
protected $eid {
set: function($value) {
$is_set = FALSE;
if (is_numeric($value)) {
$this->eid = intval($value);
$is_set = TRUE;
}
return $is_set;
}, // end setter
};
public function __construct($is_new = FALSE, $eid = 0) {
$this->is_new = $is_new;
if ($eid > 0) {
$this->set_eid($eid);
}
}
// setter method/function removed
}
答案 0 :(得分:1)
PHP每个类只允许一个getter和一个setter函数,它们是__get
& __set
魔术方法。这两个魔术方法必须处理所有私有/不可访问属性的get和set请求。 http://www.php.net/manual/en/language.oop5.magic.php
private function set_eid($id)
{
//set it...
$this->eid = $id;
}
private function get_eid($id)
{
//return it...
return $this->eid;
}
public function __set($name, $value)
{
switch($name)
{
case 'eid':
$this->set_eid($value);
break;
}
}
public function __get($name)
{
switch($name)
{
case 'eid':
return $this->get_eid();
break;
}
}
在2个switch语句中,您还可以添加其他属性的名称。
重要的是要记住__get
和__set
仅在变量无法访问时才会被调用,这意味着当从类中获取或设置时,您仍然需要手动调用{{1} }。
答案 1 :(得分:0)