2010-05-04 2 views
11

При использовании доктрины я натыкаюсь на эти 2 слова: аксессуар и мутатор.Аксессуар и мутатор?

Используются ли они только в доктрине или они специфичны для 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

+1

так почему они называют их аксессуарами и мутаторами вместо геттеров и сеттеров? они не магические методы, то есть они, если я набираю setProp(), но не определили для него один метод, он не будет создан автоматически? –

+1

Аксессуар @fayer и мутатор - это более общие термины, используемые в информатике. геттер и сеттер более случайны, я думаю ... может быть, сленг. До тех пор, как я знаю, он не будет волшебным образом создавать переменные для вас в php ... нужно посмотреть спецификации ... довольно уверен, что это не так. – m0s

2

Если я правильно вас понимаю, эти 2 являются специфическими для того, чтобы я предполагал какой-либо объектно-ориентированный язык программирования. Дело в том, что accessor - это метод или функция, которая обеспечивает доступ к закрытым полям вашего класса, а метод mutator позволяет изменять частные поля. Я могу продолжить писать об этом, но я предлагаю вам просто Google, и вы получите много информации об этом. Его все об инкапсуляции < - предложите вам найти этот термин.

+0

Мне нравится думать о них как о регулярных функциях, которые просто служат известной общеизвестной цели ... ничего более. – m0s

0

Это не просто разные термины для геттеров и сеттеров, по крайней мере, в Ларавеле.

Чтобы процитировать документацию: «Аксессоры и мутаторы позволяют форматировать атрибуты Eloquent при извлечении их из модели или настройке их значения».

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

Таким образом, можно сказать, что методы получения и установки являются подмножеством аксессорах и мутаторов, изменяющих данные с коэффициентом, равным нулю.

Положите это иначе, если бы я хотел получить «стоимость» необработанного поля из таблицы, я бы использовал getter. Если бы я хотел, чтобы это поле было выражено и отформатировано в фунтах и ​​пенсии, я мог бы использовать аксессуар.

Есть и другие способы, которыми я могу заниматься, но это один из вариантов.

+0

Не могли бы вы объяснить «изменение в нулевом значении»? Благодаря! –

+0

Конечно. Аксессоры и мутаторы меняют значение перед сохранением или возвратом нового значения. Setters и получить его не меняют значение. Поэтому, когда я сказал «в нулевом значении», я просто имел в виду «никаких изменений». Вы ничего не добавили к значению. – Puzbie

Смежные вопросы