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óaAi được truy cập
publicMọi lớp khác - thoải mái
protectedChỉ các lớp con của lớp cha
privateChỉ 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à 30

Lợ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 Account chỉ cho đổi balance qua phương thức deposit có 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