Tính đóng gói trong lập trình hướng đối tượng OOP cho phép kiểm soát được quyền truy cập nhờ các phương thức public, protected, và private. Hãy đọc bài viết sau để hiểu rõ hơn.
I. Tìm hiểu về tính đóng gói trong lập trình hướng đối tượng OOP
1. Tính đóng gói là gì?
Tính đóng gói là cơ chế được sử dụng để an toàn dữ liệu hoặc an toàn thông tin trong 1 đối tượng. Nó không cho phép người sử dụng các đối tượng thay đổi trạng thái nội tại của đối tượng.
Có thể hiểu như sau tính đóng gói không cho phép bên ngoài biết được bên trong đối tượng có những gì hay được cài đặt như thế nào. Nếu muốn thay đổi bên trong đối tượng thì phải được sự chấp nhận của đối tượng đó thông qua ba mức độ truy cập private, protected và public.
II. Tìm hiểu về các mức độ truy cập private, protected và public
Trong lập trình hướng đối tượng OOP việc đóng gói được thực hiện nhờ sử dụng các từ khoá public, private và protected hay còn gọi là mức độ truy cập.
Có ba mức độ truy cập
- public: thuộc tính hoặc phương thức có thể được truy cập từ mọi nơi. Khi không khai báo thì mặc định sẽ là public.
- protected: thuộc tính hoặc phương thức có thể được truy cập trong lớp và bên trong các lớp được kế thừa từ nó.
- private: thuộc tính hoặc phương thức chỉ có thể được truy cập trong chính lớp được khai báo.
Ví dụ 1
<?php
class Fruit {
public $name;
protected $color;
private $weight;
}
$mango = new Fruit();
$mango->name = 'Mango'; // OK ==> Mức truy cập public được quyền truy cập mọi nơi.
$mango->color = 'Yellow'; // ERROR ==> Mức truy cập protected chỉ được quyền truy cập ở bên trong class đó và những class được kế thừa.
$mango->weight = '300'; // ERROR ==> Mức truy cập private chỉ được quyền truy cập bên trong class đó.
?>
Ví dụ 2
<?php
class Fruit {
public $name;
public $color;
public $weight;
function set_name($n) { // không khai báo mức truy cập thì mặc định sẽ là public
$this->name = $n;
}
protected function set_color($n) {
$this->color = $n;
}
private function set_weight($n) {
$this->weight = $n;
}
}
$mango = new Fruit();
$mango->set_name('Mango'); // OK
$mango->set_color('Yellow'); // ERROR
$mango->set_weight('300'); // ERROR
?>
Ví dụ 3
<?php
class Fruit {
protected $name;
public $color;
public function __construct($name, $color) {
$this->name = $name;
$this->color = $color;
}
protected function intro() {
echo "The fruit is {$this->name} and the color is {$this->color}.";
}
}
class Strawberry extends Fruit {
public function message() {
echo "Am I a fruit or a berry? ";
}
public function hello(){
echo "Hello {$this->name}"; // ==> $name có mức độ truy cập là protected nên gọi được thuộc tính $name từ class Fruit
}
}
$strawberry = new Strawberry("Strawberry", "red"); // OK ==> __construct() mức truy cập là public
$strawberry->message(); // OK ==> message() mức truy cập là public
$strawberry->hello(); // OK ==> hello() mức truy cập là public
$strawberry->intro(); // ERROR ==> vì mức truy cập là protected
?>
Đóng góp ý kiến
Địa chỉ email của bạn sẽ không được công khai. Các trường bắt buộc được đánh dấu *
Tìm kiếm
Xu hướng
-
Cảnh báo hình thức tạo bill chuyển tiền giả nhiều ngân hàng
27-11-2022 . 151k lượt xem
-
Cảnh báo khi tạo bill giả trên ứng dụng Jackmmo
07-04-2023 . 18k lượt xem
-
Slay là gì? - Một từ lóng đặc biệt trong tiếng Anh
30-11-2022 . 14k lượt xem
-
Các thẻ HTML thường được sử dụng nhất
01-02-2020 . 11k lượt xem
-
Những website gõ văn bản kiếm tiền tại nhà
17-05-2023 . 9k lượt xem
2 nhận xét
Anh Long
Feb 17, 2019 . 300k views . Reply
Cảm ơn tác giả đã chia sẻ bài viết rất thú vị
Trả lời Ẩn