Lợi ích của setter và getter trong OOP PHP
Trong bài học trước, chúng ta đã tạo getter và setter cho mỗi thuộc tính. Có thể nảy sinh câu hỏi: tại sao cần những phức tạp như vậy, bởi trên thực tế có thể đạt được hiệu quả tương tự nếu làm cho các thuộc tính trở thành public thay vì private.
Vấn đề là getter và setter có một lợi thế: trước khi truy cập vào thuộc tính có thể thực hiện một số kiểm tra. Ví dụ, trong trường hợp của chúng ta, khi ghi tên và họ, chúng ta có thể kiểm tra rằng giá trị mới không phải là một chuỗi rỗng:
<?php
class User {
private $name;
private $surn;
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'name is incorrect';
}
}
public function setSurn($surn) {
if (strlen($surn) > 0) {
$this->surn = $surn;
} else {
echo 'surn is incorrect';
}
}
public function getName() {
return $this->name;
}
public function getSurn() {
return $this->surn;
}
}
?>
Hãy kiểm tra cách thức hoạt động của nó. Trước hết, hãy tạo một đối tượng của lớp:
<?php
$user = new User();
?>
Bây giờ hãy thử ghi một giá trị hợp lệ:
<?php
$user->setName('john');
?>
Và bây giờ hãy thử ghi một giá trị không hợp lệ:
<?php
$user->setName(''); // lỗi
?>
Trong lớp Employee, trong setter
của tuổi, hãy thêm kiểm tra rằng
tuổi phải nằm trong khoảng
từ 0 đến 120.
Trong lớp Employee, trong getter
của lương, hãy làm sao để
khi đọc lương, ở cuối giá trị của nó
được thêm ký hiệu đô la.