VIII. Lập trình hướng đối tượng trong PHP
2. Cơ chế đóng kín và tính rõ ràng của các phần tử trong lớp
Như chúng ta đã biết, lập trình hướng đối tượng tập trung vào việc “đóng gói” các phương thức và thuộc tính của một đối tượng nào đó.
Trong lập trình hướng đối tượng, các thành viên trong một lớp cần phải được xác định xem chúng có thể được truy xuất từ đâu (tính rõ ràng). Có ba khả năng xảy ra:
- Chế độ truy xuất công cộng (public): Các thành viên nếu được thiết lập ở chế độ này sẽ được nhìn thấy và truy xuất ở mọi nơi trong chương trình.
- Chế độ truy xuất riêng tư (private): Các thành viên nếu được thiết lập ở chế độ này sẽ chỉ được nhìn thấy và truy xuất được ở bản thân lớp định nghĩa thành viên đó.
- Chế độ bảo vệ (protected): Chế độ này sẽ được dùng để giới hạn truy cập tới các lớp được thừa kế và bản thân lớp định nghĩa thành viên đó.
Trong PHP5, tất cả các thành viên của một lớp đều phải được khai báo tính rõ ràng với các từ khoá tương ứng là public, protected và private.
Ví dụ: <?php class MyClass {
public $public = 'Public';
protected $protected = 'Protected'; private $private = 'Private';
public function printHello() { echo $this->public; echo $this->protected; echo $this->private; } }
$obj = new MyClass();
echo $obj->public; // Làm việc tốt
echo $obj->protected; // Gây lỗi do thuộc tính $protected đã bị đặt ở chế độ bảo vệ echo $obj->private; // Gây lỗi do thuộc tính $protected đã bị đặt ở chế độ riêng tư
$obj->printHello(); // Hoạt động bình thường, do các thuộc tính được triệu gọi bên trong một phương thức nằm trong lớp.
class MyClass2 extends MyClass {
protected $protected = 'Protected2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } }
$obj2 = new MyClass2(); echo $obj->public; // Chạy tốt
echo $obj2->private; // Chưa được định nghĩa echo $obj2->protected; // Gây lỗi
$obj2->printHello(); // Hiển thị Public, Protected2, not Private ?>
Nếu như chúng ta không đặt các từ khoá xác định tính rõ ràng của các thành viên, theo mặc định chúng sẽ ở chế độ public.