2010-05-04 116 views
11

当使用原则时,我偶然发现了这两个词:accessor和mutator。accessor和mutator?

这些仅在教条中使用还是他们特定于PHP?

这是什么意思?

谢谢

回答

22

他们只是吸气剂和制定者的花哨条款。

class MyClass 
{ 
    private $prop; 

    // Accessor (or Getter) 
    public function getProp() 
    { 
     return $this->prop; 
    } 


    // Mutator (or Setter) 
    public function setProp($value) 
    { 
     $this->prop = $value; 
    } 

} 
+4

并且为了澄清,无论语言还是框架,它们都是面向对象编程中常用的术语。 – nickf 2010-05-04 06:07:23

+1

那么为什么他们把它们称为访问器和变体而不是getter和setter?他们不是神奇的方法,也就是说,他们如果我输入setProp(),但没有定义一个方法,它不会自动创建? – 2010-05-04 06:14:09

+1

@fayer访问器和增变器是计算机科学中使用的更一般的术语。 getter和setter更加随意,我猜...也许是一种俚语。只要我知道,它不会神奇地为你在php中创建变量......需要看规范......很确定它不会。 – m0s 2010-05-04 06:24:43

2

如果我正确地理解了你,这两个具体到我猜的任何面向对象的编程语言。关键是accessor是一种方法或函数,它提供对类中私有字段的访问,而mutator方法允许修改私有字段。我可以继续写这个,但我建议你只是谷歌这些,你会得到很多关于它的信息。关于封装<的所有信息 - 建议您查看该术语。

+0

我喜欢将它们视为常规功能,只是用于一些常见的众所周知的目的......仅此而已。 – m0s 2010-05-04 06:30:51

0

它们不仅仅是获得者和制定者的不同术语,至少在Laravel中不是这样。

引用文档:“访问器和增变器允许您在从模型中检索它们或设置它们的值时格式化Eloquent属性。”

https://laravel.com/docs/master/eloquent-mutators

所以,你可以说,getter和setter方法是存取函数,其通过零系数更改数据的一个子集。

换句话说,如果我想从表格中获得原始字段“成本”,我会使用getter。如果我想用磅和便士来表示该字段并进行格式化,那么我可以使用一个访问器。

我还有其他方法可以解决这个问题,但这是一种选择。

+0

你能解释一下“改变零因子”吗?谢谢! – 2017-09-20 10:20:46

+0

当然。访问器和变异器在保存或返回新值之前更改值。制定者并获得它不会改变价值。所以当我说“以零为因子”时,我的意思是“没有变化”。你只是没有增加任何价值。 – Puzbie 2017-09-26 10:35:00