PHP:Getter 和 Setter 是什么?

3

PHP5中的getter和setter是什么?

有人能给我一个好的例子并解释一下吗?

4个回答

9
这是面向对象编程中数据隐藏(或封装)的概念。例如,如果你想在你的类中拥有某个属性,比如“Amount”,并给客户端更改或提取其值的选项,你应该将变量“Amount”设置为私有变量(对于使用你的类的人不可见),并生成两个公共方法——一个getter和一个setter来操作你的值。
原因是为了能够在设置或获取值之前验证数据或操作它。这里是一个简短的例子:
class test {

    private $count; //those who use your class are not able to see this property, only the methods above

    public function setCount( $value )    
    {
            //make some validation or manipulation on data here, if needed
        $this->count = $value;    
    }

    public function getCount()    
    {                
        return $this->count;    
    }    
}

3

类的属性可以是私有的。这意味着只有对象才能读写自己的私有属性。因此需要使用方法来实现。读取并返回属性值的方法称为getter,写入属性的方法称为setter。通过这些方法,类可以控制输出和输入。这个概念被称为封装


1
在某些情况下,getter和setter与封装相反。如果您为变量拥有getter和setter,那么很可能需要更改设计,因为您基本上正在公开该内部成员。为什么要使用setX、getX、setY、getY,而不是更具封装性的“moveTo”或“moveBy”方法呢? - Lotus Notes

2

在PHP 5中,Getter和Setter是相当新的概念,以两个神奇的函数__get()和set()的形式出现。正如以下示例所解释的那样,这两个函数可以显着地设置或获取对象的属性值。

class Datatype{
  private $thing;
  public function _set($k,$v){
    $this->$k = $v;
  }
  public function __get($k){
   return $this->$k;
  }
}

我认为你的意思是“动态地”,而不是“戏剧性地”——虽然这会让代码更有趣 :) - Tony

1

PHP手册在这个问题上确实没有很详细的说明,但是有一个非常详细的例子可以解释很多。魔术方法:属性重载


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接