21/5/15

Bài 08: Khi nào sử dụng private protected và public

Vấn đề lựa chọn sử dụng các thuộc tính và phương thức trong php rất là nan giải với những bạn mới biết lập trình hướng đối tượng, vì thế qua bài này ta sẽ cùng thảo luận đôi điều về vấn đề này nhé. Nội dung bao gồm
  • Khai báo tên thuộc tính để nhận dạng độ truy cập
  • Hàm set và hàm get các thuộc tính
  • Khi nào sử dụng private
  • Khi nào sủ dụng protected
  • Khi nào sử dụng public

1. Khai Báo Tên Thuộc Tính Để Nhận Dạng Cấp Độ Truy Cập

Cái tiêu đề nghe hơi lại nhưng nó thực sự rất hữu ích trong quá trình làm team cho các bạn đó. Nếu trong một team có những quy ước đặt tên biến, tên hàm riêng thì nhìn vào dòng code tuy nhiều người nhưng tưởng chừng như là chỉ có một người làm duy nhất. Bởi vậy mình đặt ra tiêu đều này để hướng dẫn các bạn cách đặt tên biến, tên hàm trong một lớp. Tuy nhiên không phải người nào cũng áp dụng như vậy nên các bạn đừng chém nhé, các bạn đọc nhưng có quyền không làm theo.

Cách chọn từ đặt cho tên biến và tên hàm

Thông thường tên biến (thuộc tính) phải là một danh từ hoặc tình từ, còn tên của hàm (phương thức) bắt đầu bằng một động từ.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A
{
    public $username;
    public $password;
  
    public function getUsername()
    {
  
    }
  
    public function getPassword()
    {
  
    }
  
    public function checkLogin()
    {
  
    }
}

Khai Báo Tên Biến Dạng Private

Thông thường nếu biến ở dạng private thì tên biến các bạn nên đặt hai dấu gạch dưới rồi mới đến tên biến.
Ví dụ:
1
2
3
4
5
6
7
class A
{
    private $__private;
    private function __func_private()
    {
    }
}

Khai Báo Tên Biến Dạng Protected

Thông thường nếu ở dạng protected thì các bạn nên đặt một dấu gạch dưới rồi mới tới tên biến
Ví dụ:
1
2
3
4
5
6
7
8
// Lớp A
class A
{
    protected $_protected;
    protected function __func_protected()
    {
    }
}

Khai Báo Tên Biến Dạng Public

Nếu ở dạng này bạn chỉ cần khai báo tên bình thường
1
2
3
4
5
6
7
class A
{
    public  $public;
    public function func_public()
    {
    }
}

2. Hàm Set Và Hàm Get Các Thuộc Tính

Các thuộc tính trong đối tượng ta dùng để gán dữ liệu và lúc cần thiết sẽ lấy dữ liệu, có những thuộc tính khi thiết lập ta muốn có những biến đổi nó trước khi gán giá trị vào thuộc tính. Ví dụ như tôi muốn khi thiết lập mật khẩu cho người dùng thì mật khẩu sẽ được tự động thêm một số ký tự đặc biệt và mã hóa để an toàn và bảo mật hơn, như vậy mỗi lần gán giá trị cho thuộc tính mật khẩu tôi phải thêm một đoạn như thế này:
1
2
3
4
5
6
7
8
class A
{
    public $username;
    public $password;
}
  
$a new A();
$a->password = md5('thehalfheart' 'ky_tu_muon_them');
Như vậy giả sử trong quá trình code tôi có sư dụng phép gán này 100 lần thì làm sao để nhớ ký tự thêm vào, chưa tính đến chuyện sau này tôi muốn sửa ký tự thêm vào thành một chuỗi và mã hóa khác thì tôi phải vào 100 dòng code đó để sửa. Giả sử tiếp tôi muốn khi lấy giá trị username thì có thêm một đoạn là Xin Chào + Username, như vậy mỗi lần tôi lấy giá trị username phải thêm nó vào, 100 dòng code thì rất là phiền. Qua những lý do đó tôi nghĩ có giải pháp là ta tạo những hàm SET và GET dùng cho việc gán và lấy dữ liệu cho các thuộc tính username và password để sau này sửa thì sửa có 1 dòng trong hàm đó thôi.
Quy tắc đặt tên như sau: setThuoctinh(), getThuoctinh()

Ví Dụ:
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
class A
{
    private $__username;
    private $__password;
  
    function getUsername()
    {
        return 'Xin chào ' $this->__username;
    }
  
    function setUsername($username)
    {
        $this->__username = $username;
    }
  
    function getPassword()
    {
        return $this->__password;
    }
  
    function setPassword($password)
    {
        $this->__password = md5($password.'ky_tu_muon_them');
    }
}
  
// Sử dụng
$a new A();
  
$a->setUsername('TheHalfheart');
  
echo $a->getUsername();
  
$a->setPassword('matkhau');
  
echo $a->getPassword();

3. Khi Nào Sử Dụng Cấp Độ Truy Cập Private

Thông thường để an toàn dữ liệu các thuộc tính đều ở dạng private nhưng điều này rất phiền hà vì phải tạo thêm các hàm SET và GET nên các lập trình viên cũng ít chú trọng đến nó. Tuy nhiên có những trường hợp sau ta bắt buộc phải dùng ở dạng private để an toàn cho đối tượng.
- Những thuộc tính có tính biến đổi dữ liệu khi nhập và lấy dữ liệu như ví dụ thuộc tính Username và Password mà tôi ví dụ ở trên.
- Những phương thức chỉ dùng trong nội bộ trong lớp đó, không có sử dụng bên ngoài lớp.
Đó là 2 đặc điểm cơ bản để bạn chọn độ truy cập là private

4. Khi Nào Sử Dụng Cấp Độ Truy Cập Protected

Protected thường được dùng khi bạn biết chắc là có lớp khác sẽ kế thừa lớp này và những phương thức, thuộc tính đó chỉ được dùng trong lớp kế thừa nó.
Giả sử bạn khai báo lớp Động Vật, trong đó có hàm lưu dữ liệu động vật vào database, hàm này dùng chung cho tất cả các lớp kế thừa nó và để bảo mật tôi sẽ không muốn nó có thể gọi từ bên ngoài, vì thế tôi sẽ khai báo là protected
Đó là những ví dụ cơ bản, chứ thực tế thì cũng tùy vào từng bài toán cụ thể mà bạn lựa chọn

5. Khi Nào Sư Dụng Cấp Độ Truy Cập Public

Public là cấp độ thoáng nhất, nó có thể gọi ở mọi nơi từ trong nội bộ của lớp đến lớp kế thừa nó, thậm chí cả bên noài cũng gọi được.
Những hàm này thường được dùng để lấy dữ liệu và xuất dữ liệu ra bên ngoài, hay là những hàm xử lý dữ liệu, những hàm này mang tính chất là hàm thao tác cuối cùng với người coder. Ví dụ như các hàm SET và GET được để ở dạng public

Kết Thúc Bài Học


Trên đó là những ý kiến đóng góp mang tính cá nhân của mình, không phải là bắt buộc như vậy mà là tôi cảm thấy như vậy nên chia sẻ cho mọi người biết. Nếu bạn cảm thấy không hay, không đúng thì góp ý để mình có thể hoàn thiện bài này một cách hay nhất. Bài tiếp theo chúng ta sẽ tìm hiểu tính đa hình trong php.
Nguồn: (code.freetuts.net)

0 nhận xét: