Điều lạ lùng là bạn có người đặt cược nhưng đang rời khỏi thuộc tính public
. (Giả sử không có __get
ma thuật đang diễn ra.)
Bạn thường muốn sử dụng getters/setters để kiểm soát nhiều hơn những gì có thể được gán cho thuộc tính và những gì không thể. Hoặc, bạn có thể muốn thực thi mã khi thuộc tính được truy cập hoặc thay đổi. Trong cả hai trường hợp, bạn nên ép buộc sử dụng getters/setters bằng cách tạo thuộc tính private
hoặc protected
, nếu không nó sẽ là vô nghĩa. Đó là về việc ngăn cản bản thân hoặc những người khác sẽ sử dụng lớp học để tự chụp chân mình.
Nếu setter trong ví dụ của bạn chỉ thiết lập giá trị mà không làm bất cứ điều gì khác, nó không cần thiết. Nếu nó làm một cái gì đó khác là cần thiết bất cứ khi nào giá trị được thiết lập, bạn có một lỗ hổng trong thiết kế lớp học của bạn vì nó có thể thay đổi giá trị mà không sử dụng setter.
class Foo {
public $bar = 0; // is only allowed to contain numeric values
public function setBar($val) {
if (is_numeric($val)) {
$this->bar = $val;
}
}
}
$obj = new Foo();
$obj->bar = 'some value'; // set a string, which is not allowed
Nếu bạn muốn làm cho $bar
protected
, điều đó sẽ không thể thực hiện.
Một từ buzz trong ngữ cảnh này: Ẩn thông tin http://en.wikipedia.org/wiki/Information_hiding Và những gì bạn yêu cầu áp dụng cho OOP nói chung không chỉ PHP. –
Tôi đã sử dụng cú pháp của php và gắn thẻ câu hỏi cho phần PHP đó là lý do tại sao thêm từ khóa PHP, tôi nhận thức được thực tế này là tổng quát của nó cho nhiều ..Cảm ơn –