Bài 04: Mức truy cập thuộc tính và phương thức trong PHP
Tổng quan về OPP PHP có 3 mức truy cập một thuộc tính & phương thức của một đối tượng. Public: Mức truy cập công khai. Protected: Mức truy cập bên trong chính class đó và class con kế thừa từ nó Private: Mức truy cập bên trong class. 1. Mức truy cập public Với các thuộc tính ...
Tổng quan về OPP PHP có 3 mức truy cập một thuộc tính & phương thức của một đối tượng.
- Public: Mức truy cập công khai.
- Protected: Mức truy cập bên trong chính class đó và class con kế thừa từ nó
- Private: Mức truy cập bên trong class.
1. Mức truy cập public
Với các thuộc tính và phương thức có mức truy cập là public, chúng có thể được truy cập ở bất cứ nơi đâu, bao gồm bên trong và bên ngoài class. Trong PHP, mặc định khi một thuộc tính hay phương thức mà không được gán tầm vực, thì mặc định thuộc tính hay phương thức đó sẽ mang tầm vực là public.
Ví dụ:
class CustomerClass{ // Cacs thuộc tính public $fullName = ""; public $officeCode = ""; // Các phương thức public function getFullName(){ return $this->fullName; } public function getOfficeCode(){ return $this->fullName; } } // Khởi tạo một dối tượng $customer = new CustomerClass(); // Gán giá trị của $fullName; $customer->fullName = 'Nguyễn Văn B'; // Lấy giá trị thuộc tính fullName; echo $customer->fullName(); // Kết quả Nguyễn Văn B // Or $customer->getFullName(); // Kết quả Nguyễn Văn B
2. Mức truy cập Protected.
class CustomerClass { // Thuộc tính protected $fullName = "Nguyễn Văn A"; // Phương thức protected function getFullName(){ return $this->fullName; } } // Khởi tạo đối tượng $customer = new CustomerClass(); // Lấy giá trị của thuộc tính. echo $customer->getFullName();
Khi thực thi đoạn script trên, hệ thống sẽ thông báo lỗi là : Fatal error: Cannot access protected property CustomerClass
Điều này có ý nghĩa là đối với các thuộc tính hay phương thức có mức truy cập là protected thì chúng sẽ không thể được truy xuất tùy tiện bất cứ nơi đâu mà chỉ có thể được truy xuất trong chính class hoặc class con kế thừa class này.
Ví dụ 02:
Truy cập phương thức thuộc tính từ function mức truy cập là public
class CustomerClass { // Thuộc tính protected $fullName = "Nguyễn Văn A"; // Phương thức protected function getFullName(){ return $this->fullName; } public function getFullName2(){ return $this->fullName; } } // Khởi tạo đối tượng $customer = new CustomerClass(); // Lấy giá trị của thuộc tính. echo $customer->getFullName2(); // Kết quả: Nguyễn Văn AKhi chạy đoạn mã trên sẽ đưa ra kết quả là "Nguyễn Văn A". Vì hàm getFullName2() có mức truy cập là public khi đó $customer có thể truy xuất tới hàm này. Và hàm này truy xuất tới thuộc tính của CustomerClass.
Ví dụ 03:
Truy cập thuộc tính/ phương thức từ class con.
class CustomerClass { // Thuộc tính protected $fullName = "Nguyễn Văn A"; // Phương thức protected function getFullName(){ return $this->fullName; } } class CustomerChildClass extends CustomerClass{ public function getFullNameParent(){ return $this->getFullName(); } } // Khởi tạo đối tượng $customer_child = new CustomerChildClass(); // Lấy giá trị của thuộc tính. echo $customer_child->getFullNameParent();
3. Mức truy cập Private.
Mức truy cập private chính là mức khó tính nhất trong 3 mức là public, protected, private. Vì những thuộc tính hay phương thức có mức này chỉ có thể được truy xuất bên trong chính class chứa nó. Thậm chí những class(lớp) kế thừa class(lớp) này cũng không thể truy xuất được.
Ví dụ 01:
class CustomerClass { // Thuộc tính private $fullName = "Nguyễn Văn A"; // Phương thức private function getFullName(){ return $this->fullName; } } // Khởi tạo đối tượng $customer = new CustomerClass(); // Lấy giá trị của thuộc tính. echo $customer->getFullName(); // Báo lỗi Call to undefined property...
Cũng giống với mức truy cập protected. Chúng ta không thể truy cập tới bất kỳ thuộc tính & phương thức của một class có mức truy cập là private.
Ví dụ 02:
Truy cập thuộc tính/phương thức từ lớp kế thừa có mức truy cập là public.
class CustomerClass { // Thuộc tính private $fullName = "Nguyễn Văn A"; // Phương thức private function getFullName(){ return $this->fullName; } } class CustomerChildClass extends CustomerClass { // Phương thức private function getFullNameParent(){ return $this->getFullName(); } } // Khởi tạo đối tượng $customerchild = new CustomerChildClass(); // Lấy giá trị của thuộc tính. echo $customerchild->getFullNameParent; // Báo lỗi Call to private method...
class CustomerClass { // Thuộc tính private $fullName = "Nguyễn Văn A"; // Phương thức private function getFullName(){ return $this->fullName; } public function getFullName2(){ return $this->fullName; } } // Khởi tạo đối tượng $customer = new CustomerClass(); // Lấy giá trị của thuộc tính. echo $customer->getFullName2(); // Kết quả: Nguyễn Văn A
4. Thuộc tính và phương thức static.
Từ khóa static cho phép các thuộc tính và phương thức có thể được truy cập mà không cần khởi tạo class.
Cú pháp: Tên class + toán tử phân giải phạm vi “::” + tên thuộc tính hoặc phương thức.
Một trong những lợi ích chính khi sử dụng thuộc tính static là chúng giữ các giá trị được lưu trữ trong suốt khoảng thời gian script tồn tại
Ví dụ:
class CustomerClass { // Thuộc tính public static $fullName = "Nguyễn Văn A"; // Phương thức public static function getFullName(){ return self::$fullName; } } // Lấy giá trị của thuộc tính. echo CustomerClass::$fullName; // Kết quả: Nguyễn Văn A // Gọi tới phương thức echo CustomerClass::getFullName(); // Kết quả: Nguyễn Văn A