Trong lập trình hướng đối tượng (OOP), đóng gói (encapsulation) và kế thừa (inheritance) là hai nguyên lý cốt lõi giúp tổ chức và mở rộng hệ thống một cách hiệu quả, rõ ràng và dễ bảo trì.
Đóng gói (Encapsulation)
Đóng gói là việc che giấu chi tiết bên trong của class và chỉ cho phép truy cập thông qua các phương thức (methods) được xác định sẵn.
Ví dụ đơn giản:
class BankAccount {
private $balance = 0;
public function deposit($amount) {
if ($amount > 0) {
$this->balance += $amount;
}
}
public function getBalance() {
return $this->balance;
}
}
Giải thích:
- Thuộc tính
$balancelàprivate, nên không thể truy cập trực tiếp từ bên ngoài class. - Muốn thao tác với nó, phải dùng phương thức
deposit()hoặcgetBalance(). - Đây chính là đóng gói dữ liệu: bảo vệ nội dung bên trong và chỉ cho phép tương tác thông qua giao diện an toàn.
Kế thừa (Inheritance)
Kế thừa là việc một class con được thừa hưởng các thuộc tính và phương thức của class cha, đồng thời có thể mở rộng hoặc ghi đè (override) các phương thức nếu cần.
Ví dụ:
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
return "$this->name makes a sound.";
}
}
class Dog extends Animal {
public function speak() {
return "$this->name says Woof!";
}
}
Sử dụng:
$dog = new Dog("Toto");
echo $dog->speak(); // Kết quả: Toto says Woof!
Giải thích:
- Class
Dogkế thừa từAnimal→ được sử dụng lại thuộc tính$namevà phương thức__construct(). - Ghi đè (
override) phương thứcspeak()để có hành vi riêng. - Điều này giúp ta tái sử dụng code hiệu quả và mở rộng linh hoạt cho nhiều đối tượng.
Tóm lại:
| Khái niệm | Tác dụng chính |
|---|---|
| Đóng gói | Bảo vệ dữ liệu, kiểm soát truy cập |
| Kế thừa | Tái sử dụng mã, mở rộng chức năng |
Trong thực tế, bạn sẽ thường kết hợp cả hai để xây dựng các hệ thống lớn, có cấu trúc rõ ràng, dễ bảo trì và mở rộng.
👉 Bài tiếp theo chúng ta sẽ tìm hiểu cách autoload class để code sạch hơn và không cần include thủ công mỗi lần sử dụng class.

Thảo luận