Encapsulation (Đóng gói)
Gói code vào đối tượng và chỉ “chìa” ra các phương thức cần thiết để tương tác với đối tượng đó - như chiếc TV: vi mạch phức tạp giấu bên trong lớp vỏ, bạn chỉ có nút bấm/công tắc để dùng.
Access modifiers
| Từ khóa | Ai được truy cập |
|---|---|
public | Mọi lớp khác - thoải mái |
protected | Chỉ các lớp con của lớp cha |
private | Chỉ method thuộc class đó (lớp con cũng KHÔNG được) |
Ví dụ: Person với private + getter/setter
<?php
class Person {
private $name;
private $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function getName() { return $this->name; }
public function setName($name) { $this->name = $name; }
public function getAge() { return $this->age; }
public function setAge($age) {
if ($age > 0) { // Đảm bảo tuổi phải là số dương
$this->age = $age;
}
}
}
$person = new Person("John Doe", 30);
$person->setAge(-5); // Bị chặn bởi validation trong setter
echo $person->getAge(); // Vẫn là 30Lợi ích (góc nhìn thiết kế phần mềm)
- Giảm tác động chéo gây lỗi: app như chiếc ô tô 4 bánh - cán đinh chỉ cần thay bánh hỏng, xe vẫn chạy.
- Cải thiện tái sử dụng: module đóng gói tốt dùng lại được nhiều nơi (thư viện PHP/NodeJS là ví dụ tiêu biểu).
- Tăng bảo mật: chỉ cho tác động qua phương thức nhất định - ví dụ class
Accountchỉ cho đổibalancequa phương thứcdepositcó cài quy tắc an toàn.
Đóng gói thể hiện ở nhiều mức độ:
- Mức phương thức: một phương thức chỉ làm MỘT việc duy nhất
- Mức class: một class chỉ làm một việc - tốt nhất chỉ chứa một phương thức trách nhiệm chính (handler/execute) → chính là Single Responsibility Principle
Liên quan
- OOP là gì - 1 trong 4 trụ cột
- Single Responsibility Principle - đóng gói ở mức class
- Code Reuse - lợi ích trực tiếp của đóng gói