Trong bài viết này chúng ta sẽ tiếp tục tìm hiểu về các mức truy cập trong lập trình hướng đối tượng. Qua bài viết về 4 tính chất của lập trình hướng đối tượng thì bạn có thể thấy, các thuộc tính hoặc function của class cha đều có thể truy cập được từ class con nhờ tính kế thừa. Nhưng nếu bạn có thuộc tính hoặc function không muốn cho các class khác truy cập thì phải làm như thế nào. Chúng ta cùng tìm hiểu nhé.
1. public
Có thể nói đây là mức truy cập thoáng nhất. Vì bạn có thể truy cập được thoải mái cho dù bạn đang ở nội bộ class hay ở ngoài class.
Nếu không khai báo từ khóa public ở phía trước thuộc tính hoặc function thì PHP sẽ tự hiểu là public.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<?php class Parent { /** * Thuộc tính public. * @var string */ public $name; /** * Khai báo public function. * @return string */ public function getName() { return $this->name; } /** * Nếu không khai báo mức độ truy cập thì sẽ tự hiểu là public. */ function setName() { $this->name = 'Example'; } } class Children extends Parent { function showName() { // Vì function getName() là public nên ta có thể gọi được ở class con. echo $this->getName(); } } $children = new Children(); $children->showName(); |
2. protected
Với từ khóa protected, bạn chỉ có thể truy cập vào các thuộc tính hoặc function ở nội bộ class và các class con của nó thôi. Có nghĩa rằng nếu ở ngoài class thì bạn không thể gọi được các thuộc tính hoặc function có mức truy cập protected.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php class Parent { /** * Thuộc tính có mức truy cập protected. * @var string */ protected $name; protected function getName() { return $this->name; } } class Children extends Parent { /** * Class Children kế thừa class Parent * nên có thể truy cập vào các thuộc tính và function protected. */ function setName($name) { $this->name = $name; } protected function showName() { echo $this->getName(); } } // Khởi tạo đối tượng $children = new Children(); // Đúng $children->setName('Vi-magento'); // Sai. Vì function showName() đang ở mức protected nên không thể gọi được ở ngoài class. $children->showName(); |
3. private
Đối với các thuộc tính, function có mức truy cập là private thì chúng ta chỉ có thể truy cập chúng từ nội bộ của class. Có nghĩa là dù bạn có kế thừa class này đi chăng nữa thì cũng không truy cập được các thuộc tính hoặc function là private.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php class DongVat { private $name; function setName($name) { return $this->name = $name; } function getName() { return $this->name; } } $contrau = new DongVat(); // Sai vì thuộc tính name là private nên không thể truy cập được từ bên ngoài. $contrau->name = 'Con Trâu'; // Đúng $contrau->setName('Con Trâu'); // Đúng echo $contrau->getName(); |