PHP NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Bài 06: Các mức truy cập private protected và public

Trong tính kế thừa tất cả các thuộc tính và phương thức của lớp cha đều sử dụng được ở lớp con, nhưng thực tế có những thuộc tính và phương thức ở lớp cha không muốn lớp con có thể truy cập vào. Cũng như ở lớp con cũng có những thuộc tính và phương thức chỉ muốn sử dụng riêng trong đối lớp đó thôi đó chứ không được truy xuất ở ngoài lớp. Để giải quyết vấn đề này ta sẽ tìm hiểu các mức truy cập private, protected và public trong lập trình hướng đối tượng.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Mức truy cập private

Đây là thành phần chỉ dành riêng cho nội bộ của lớp, nghĩa là ta không thể truy xuất tới thành phần private ở lớp con hoặc ở bên ngoài lớp.

Mức truy cập private thường được sử dụng với:

  • Các thuộc tính dữ liệu nhằm bảo vệ chúng, tránh sự truy cập tự do từ bên ngoài. Các thuộc tính này sẽ có những hàm SET và GET gán và lấy dữ liệu.
  • Các phương thức trung gian tính toán trong nội bộ của đối tượng mà ta k muốn bên ngoài có thể can thiệp vào.

Ví dụ không kế thừa:

Bài viết này được đăng tại [free tuts .net]

// Lớp Xe
class Xe
{
    private $loaixe;
 
    function getLoaixe()
    {
         return $this->loaixe;
    }
 
    function setLoaixe($loaixe)
    {
            $this->loaixe = $loaixe;
    }
}
 
// Khởi tạo một lớp đối tượng xe
$xe = new Xe();
 
// Gán giá trị cho thuộc tính loại xe
$xe->setLoaixe('Wave S');
 
// Lấy giá trị thuộc tính loại xe
echo $xe->getLoaixe();  // kết quả xuất ra Wave S

Ở ví dụ trên muốn truy xuất giá trị thuộc tính loaixe thì phải thông qua phương thức setLoaixegetLoaixe chứ không thể trỏ thẳng trực tiếp đến thuộc tính loaixe vì thuộc tính loaixe đang ở mức private.

Như bài này là sai:

// Lớp Xe
class Xe
{
    private $loaixe;
 
    function getLoaixe()
    {
        return $this->loaixe;
    }
 
    function setLoaixe($loaixe)
    {
        $this->loaixe = $loaixe;
    }
}
 
// Khởi tạo một lớp đối tượng xe
$xe = new Xe();
 
// Gán giá trị cho thuộc tính loại xe
// nhưng sai tại vì loaixe đang ở mức private
// nên không thể truy xuất bên ngoài
$xe->loaixe = 'Wave S';
 
// Lấy giá trị thuộc tính loại xe
// cũng sai vì loaixe là private
echo $xe->loaixe;

Ví dụ có kế thừa:

// Lớp Xe
class Xe
{
    private $loaixe;
 
    var $tenxe;
 
    function getLoaixe()
    {
        return $this->loaixe;
    }
 
    function setLoaixe($loaixe)
    {
        $this->loaixe = $loaixe;
    }
 
    private function xoaLoaixe()
    {
        echo 'Hàm xóa loại xe';
    }
}
 
// Kế thừa từ lớp xe
class XeHonda extends Xe
{
    function hienThiThongTin()
    {
        // lệnh này đúng
        echo $this->tenxe;
 
        // lệnh này sai vì thuộc tính loaixe là
        // private trong lớp cha
        echo $this->loaixe;
 
        // lệnh này đúng
        $this->setLoaixe('Wave S');
 
        // lệnh này đúng
        echo $this->getLoaixe();
 
        /// Lệnh này sai vì hàm xoaLoaixe là
        // private trong lớp cha
        $this->xoaLoaixe();
    }
}
 
// -------------------
// Chương trình chính//
// -------------------
 
// Khởi Tạo mới lớp xe hon da
$xehonda = new XeHonda();
 
// Gọi hàm hienThiThongTin trong lớp XeHonda
// Các bạn kiểm tra trong hàm này để xem các
// lỗi mà tôi đã ghi chú
$xehonda->hienThiThongTin();
 
// Lệnh này đúng vì lớp XeHonda kế thừa lớp Xe nên
// nó được kế thừa các thuộc tính và hàm của lớp cha
$xehonda->setLoaixe('Suzuki');
echo $xehonda->getLoaixe();
 
// Lệnh này sai vì hàm xoaLoaixe trong lớp Xe là
// private nên lớp XeHonda không được kế thừa
$xehonda->xoaLoaixe();

Phần ghi chú tôi đã giải thích rõ rồi nên tôi không giải thích gì thêm.

2. Mức truy cập protected

Mức truy cập protected chỉ cho phép truy xuất nội bộ trong lớp đó và lớp kế thừa, riêng ở bên ngoài lớp sẽ không truy xuất đc. Mức protected thường được dùng cho những phương thức và thuộc tính có khả năng bị lớp con định nghĩa lại (overwrite).

Ví dụ:

// Lớp Xe
class Xe
{
    protected $loaixe;
}
 
// Kế thừa từ lớp xe
class XeHonda extends Xe
{
    function hienThiThongTin()
    {
        // Lệnh này đúng vì loaixe đang ở
        // mức protected nên nó được kế thừa
        $this->loaixe = 'Wave S';
    }
    protected function suaChuaXe()
    {
        // Lệnh
    }
}
 
// ------------------//
// Chuong Trình Chính//
// ------------------//
 
$honda = new XeHonda();
 
// Lệnh này sai vì loaixe đang
// ở mức protected nên ở bên ngoài lớp
// không được truy xuất vào
$honda->loaixe = 'Wave Tàu';
 
// Lệnh này đúng
$honda->hienThiThongTin();
 
// Lệnh này sai vì: function suaChuaXe đang
// ở mức protected nên ko thể truy xuất
// từ ngoài lớp XeHonDa
$honda->suaChuaXe();

3. Mức truy cập public

Đây là mức truy cập thoáng nhất bởi vì bạn có thể truy cập tới các phương thức và thuộc tính ở bất cứ đâu, dù trong nộ bộ của lớp hay ở lớp con hay cả bên ngoài lớp đều được.

Khi khai báo thuộc tính là public ta có thể dùng từ khóa var để thay thế cho public như những ví dụ các bài trước.

Ví dụ:

class Xe
{
    private $loaixe; // Mức private
    protected $tenxe; // Mức protected
    var $sokhung; // Mức public
    public $soseri; // Mức public
}

Khi khai báo với hàm là public nếu ta không đặt từ public ở đầu thì php sẽ tự hiểu hàm này là public.

Ví dụ:

class Xe
{
    // Ở dạng public vì ta không có từ khóa gì ở trước
    function showTenXe()
    {
        // lệnh
    }
 
    // Ở dạng public vì có từ khóa public ở trước
    public function showHangXe()
    {
        // lệnh
    }
 
    // Ở dạng private vì có từ khóa private ở trước
    private function setTenxe()
    {
        // lệnh
    }
 
    // Ở dạng protected vì có từ khóa protected ở trước
    protected function getTenXe()
    {
        // lệnh
    }
}

4. Lời kết

Còn mấy mức nữa nhưng trong bài này không đề cập tới, vì thực tế thì nó rất ít sử dụng. Bài tiếp theo ta sẽ tìm hiểu tính kế thừa lồng trong php nhé.

Danh sách file tải về

Tên file tải về Pass giải nén
Tải bài học định dạng PDF freetuts.net hoặc gameportable.net

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top