2010-05-04 19 views
11

khi sử dụng học thuyết tôi vấp ngã khi có 2 từ: accessor và mutator.accessor và mutator?

là những chỉ được sử dụng trong học thuyết hoặc là chúng cụ thể cho php?

và ý của chúng là gì?

cảm ơn

Trả lời

22

Chúng chỉ là các thuật ngữ ưa thích cho getters và setters.

class MyClass 
{ 
    private $prop; 

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


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

} 
+4

Và để làm rõ, chúng là các thuật ngữ phổ biến được sử dụng trong lập trình hướng đối tượng, bất kể ngôn ngữ hoặc khuôn khổ. – nickf

+1

vậy tại sao họ gọi họ là người truy cập và người thay thế thay vì getters và setters? họ không phải là phương pháp kỳ diệu, đó là để nói, họ nếu tôi gõ setProp() nhưng đã không được xác định một phương pháp cho rằng, nó sẽ không được tạo ra tự động? –

+1

@fayer accessor và mutator là các thuật ngữ tổng quát hơn được sử dụng trong khoa học máy tính. getter và setter là cách bình thường hơn tôi đoán ... có thể là một tiếng lóng. Miễn là tôi biết, nó sẽ không kỳ diệu tạo ra các biến cho bạn trong php ... cần phải xem các thông số kỹ thuật ... khá chắc chắn nó sẽ không. – m0s

2

Nếu tôi hiểu chính xác 2 điều này là cụ thể đối với tôi đoán bất kỳ ngôn ngữ lập trình hướng đối tượng nào. Vấn đề là accessor là một phương thức hoặc một hàm cung cấp quyền truy cập vào các trường riêng trong lớp của bạn và phương thức mutator cho phép sửa đổi các trường riêng. Tôi có thể viết về điều này, nhưng tôi đề nghị bạn chỉ cần google này, và bạn sẽ nhận được rất nhiều thông tin về nó. Tất cả của nó về đóng gói < - đề nghị bạn tìm kiếm thuật ngữ đó là tốt.

+0

Tôi thích nghĩ về chúng như các chức năng thông thường chỉ phục vụ cho một số mục đích phổ biến ... không có gì nhiều hơn nữa. – m0s

0

Chúng không chỉ là các thuật ngữ khác nhau cho getters và setters, ít nhất là không có trong Laravel.

Để trích dẫn tài liệu: "Trình truy cập và trình tắt cho phép bạn định dạng các thuộc tính Eloquent khi truy xuất chúng từ mô hình hoặc đặt giá trị của chúng."

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

Vì vậy, bạn có thể nói rằng getter và setter là một tập hợp con của accessors và mutators mà thay đổi dữ liệu với hệ số zero.

Đặt theo cách khác, nếu tôi muốn lấy một "trường" chi phí nguyên liệu từ một bảng, tôi sẽ sử dụng bộ thu thập dữ liệu. Nếu tôi muốn có được trường đó được thể hiện và định dạng bằng pao và pence, thì tôi có thể sử dụng một accessor.

Có nhiều cách khác tôi có thể thực hiện, nhưng đó là một tùy chọn.

+0

Bạn có thể giải thích "thay đổi bằng hệ số không"? Cảm ơn! –

+0

Chắc chắn. Accessors và Mutators thay đổi một giá trị trước khi lưu hoặc trả về giá trị mới. Người định cư và làm cho nó không thay đổi giá trị. Vì vậy, khi tôi nói "bởi một yếu tố không", tôi chỉ có nghĩa là "không thay đổi". Bạn vừa thêm không có gì vào giá trị. – Puzbie