2010-05-04 162 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