Trong lập trình hướng đối tượng (OOP), các Access Modifiers (các phạm vi truy cập) giúp kiểm soát mức độ truy cập vào các thuộc tính và phương thức của một class. Điều này rất quan trọng vì nó giúp bảo vệ dữ liệu, đồng thời cung cấp các phương thức để truy cập hoặc thay đổi dữ liệu theo cách an toàn.
PHP cung cấp ba loại Access Modifiers chính: public, private, và protected. Trong bài viết này, chúng ta sẽ khám phá chi tiết từng loại, cách sử dụng và các ví dụ minh họa.
1. Các loại Access modifiers trong PHP
1.1. Public
Thuộc tính hoặc phương thức được khai báo với từ khóa public có thể được truy cập từ bất kỳ đâu, cả bên trong và bên ngoài class. Đây là mức truy cập rộng nhất.
class Car {
public $color;
public function setColor($color) {
$this->color = $color;
}
public function getColor() {
return $this->color;
}
}
$myCar = new Car();
$myCar->setColor("Red");
echo $myCar->getColor(); // Output: Red1.2. Private
Thuộc tính hoặc phương thức được khai báo với từ khóa private chỉ có thể được truy cập từ bên trong class mà nó được định nghĩa. Điều này giúp bảo vệ dữ liệu khỏi bị truy cập hoặc thay đổi từ bên ngoài class.
class Car {
private $engine;
public function setEngine($engine) {
$this->engine = $engine;
}
public function getEngine() {
return $this->engine;
}
}
$myCar = new Car();
$myCar->setEngine("V8");
echo $myCar->getEngine(); // Output: V8
// echo $myCar->engine; // Lỗi: không thể truy cập thuộc tính private từ bên ngoài class1.3. Protected
Thuộc tính hoặc phương thức được khai báo với từ khóa protected chỉ có thể được truy cập từ bên trong class định nghĩa và các class con (class kế thừa). Nó không thể được truy cập từ bên ngoài class.
class Vehicle {
protected $speed;
public function setSpeed($speed) {
$this->speed = $speed;
}
public function getSpeed() {
return $this->speed;
}
}
class Car extends Vehicle {
public function displaySpeed() {
echo "Speed is: " . $this->speed;
}
}
$myCar = new Car();
$myCar->setSpeed(120);
$myCar->displaySpeed(); // Output: Speed is: 120
// echo $myCar->speed; // Lỗi: không thể truy cập thuộc tính protected từ bên ngoài2. Sự khác nhau giữa Public, Private và Protected
| Phạm vi truy cập | Public | Private | Protected |
|---|---|---|---|
| Bên trong class | ✔️ | ✔️ | ✔️ |
| Bên trong class con | ✔️ | ❌ | ✔️ |
| Bên ngoài class | ✔️ | ❌ | ❌ |
2.1. Public
Các thuộc tính và phương thức public có thể truy cập từ bất cứ đâu, kể cả bên ngoài class. Đây là phạm vi truy cập rộng nhất và có thể dễ dàng quản lý dữ liệu từ bên ngoài class.
2.2. Private
Các thuộc tính và phương thức private chỉ có thể được truy cập bên trong class đó. Các class con không thể truy cập hoặc ghi đè các thuộc tính private của class cha. Đây là mức bảo vệ cao nhất, thường dùng để bảo vệ dữ liệu quan trọng không bị thay đổi từ bên ngoài.
2.3. Protected
Các thuộc tính và phương thức protected có thể truy cập từ bên trong class định nghĩa và các class con. Tuy nhiên, nó không thể truy cập từ bên ngoài class. Mức bảo vệ này linh hoạt hơn so với private khi làm việc với các class kế thừa.
3. Ví dụ sử dụng Access modifiers
3.1. Ứng dụng của Public modifier
Dùng public khi bạn muốn các thuộc tính hoặc phương thức có thể dễ dàng truy cập và sử dụng bởi người dùng bên ngoài class.
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
$user = new User("John Doe");
echo $user->getName(); // Output: John Doe3.2. Ứng dụng của Private modifier
Dùng private khi bạn muốn bảo vệ dữ liệu và không cho phép các thao tác trực tiếp từ bên ngoài.
class BankAccount {
private $balance = 0;
public function deposit($amount) {
$this->balance += $amount;
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance(); // Output: 100
// echo $account->balance; // Lỗi: không thể truy cập thuộc tính private3.3. Ứng dụng của Protected modifier
Dùng protected khi bạn muốn cho phép các class con kế thừa và truy cập vào các thuộc tính, nhưng vẫn giới hạn quyền truy cập từ bên ngoài.
class Employee {
protected $salary;
public function __construct($salary) {
$this->salary = $salary;
}
}
class Manager extends Employee {
public function getSalary() {
return $this->salary;
}
}
$manager = new Manager(5000);
echo $manager->getSalary(); // Output: 5000
// echo $manager->salary; // Lỗi: không thể truy cập thuộc tính protected từ bên ngoài4. Tại sao nên sử dụng Access modifiers?
Sử dụng Access Modifiers giúp:
- Bảo vệ dữ liệu: Bạn có thể kiểm soát dữ liệu và cách dữ liệu được truy cập hoặc thay đổi.
- Tăng tính bảo trì: Giúp ngăn ngừa sự can thiệp không mong muốn từ bên ngoài class, làm giảm lỗi và giúp mã dễ bảo trì hơn.
- Đảm bảo tính nhất quán: Bạn có thể kiểm soát chặt chẽ cách mà dữ liệu của đối tượng được xử lý.
5. Các lưu ý khi sử dụng Access modifiers
- Public: Nên hạn chế sử dụng
publiccho thuộc tính nếu không cần thiết, vì việc cho phép truy cập quá nhiều từ bên ngoài có thể gây ra lỗi. - Private: Dùng khi bạn cần bảo vệ dữ liệu, nhưng cần lưu ý rằng các class con sẽ không thể truy cập các thuộc tính hoặc phương thức
private. - Protected: Linh hoạt hơn
privatevà thích hợp khi bạn muốn chia sẻ dữ liệu giữa các class kế thừa nhưng vẫn muốn bảo vệ khỏi truy cập từ bên ngoài.
6. Kết luận
Access Modifiers (public, private, protected) trong PHP giúp lập trình viên kiểm soát quyền truy cập vào các thuộc tính và phương thức của class, từ đó tăng tính bảo mật, bảo trì và nhất quán của mã nguồn. Biết cách sử dụng đúng các Access Modifiers sẽ giúp bạn bảo vệ dữ liệu, đảm bảo tính toàn vẹn của hệ thống và giảm thiểu lỗi.
Trong bài học tiếp theo, chúng ta sẽ tìm hiểu về các khái niệm nâng cao trong OOP như kế thừa, đa hình, và interfaces trong PHP.









