Hướng dẫn protected trong php

Tiếp tục chuỗi Series về lập trình hướng đối tượng (OOP) trong PHP hôm nay chúng ta sẽ tìm hiểu về 3 phạm vi giới hạn quyền truy cập đó là Public, Private và Protected.

Sau khi đọc xong bài viết sẽ biết cách sử dụng Public, Private và Protected nhanh chóng. Đồng thời cũng áp dụng cho các dự án PHP của mình trong tương lai hiệu quả hơn.

  • Public trong PHP
  • Protected trong PHP
  • Private trong PHP

Public là quyền truy cập mặc định mọi nơi. Có thể từ lớp đó, lớp kế thừa và ngoài lớp.

Ví dụ:

public;
    }
}
$result = new DoiTuong();
$result->tendoituong();
?>

Sau khi chạy lệnh thì tên đối tượng đã được in ra.

Protected trong PHP

Protected được truy cập trong lớp và lớp kế thừa class. Không truy xuất được từ bên ngoài.

Ví dụ:

ten = 'Quả Táo';
?>

Sau khi chạy đã xuất hiện một thông báo lỗi. Như vậy là Protected không cho phép truy cấp ở bên ngoài dấu 2 ngoặc của Class {…}.

Private trong PHP

Private quyền truy cập hẹp nhất. Nó chỉ cho phép truy cập ở trong lớp đó. Không truy xuất được từ bên ngoài và lớp kế thừa.

Ví dụ:

ten = $n;

  }
  protected function lay_mau($n) { 
    echo $this->mau = $n;
  }
  private function lay_khoiluong($n) {
    echo $this->khoiluong = $n;
  }
}

$quaxoai = new TraiCay();
$quaxoai->lay_ten('Quả Xoài'); // OK
$quaxoai->lay_mau('vàng'); // Lỗi
$quaxoai->lay_khoiluong('300'); // Lỗi
?>

Khi chạy lệnh sẽ xuất hiện các lỗi. Để kiểm tra bạn hãy thay thế protected và private thành public xem kết quả như thế nào nhé.

Với ví dụ này bạn sẽ so sánh được 3 kiểu giới hạn truy cập. Khi am hiểu bạn sẽ sử dụng thành thạo hơn và giúp bảo mật hệ thống tốt hơn khi viết code.

Trong bài ngay hôm nay, chúng ta sẽ tìm hiểu cách thức hoạt động của Public, Protected và Private của OOP (Lập trình hướng đối tượng) trong PHP.

1. Mô hình tổng quan

Hướng dẫn protected trong php


Public: Các đối tượng bên ngoài có thể gọi hàm và biến trong class, hỗ trợ sự kế thừa.

Protected: Các đối tượng bên ngoài không thể gọi được biến và hàm trong class, hỗ trợ sự kế thừa.

Private : Không cho các đối tượng bên ngoài gọi biến và hàm trong class, không hỗ trợ kế thừa.

2. Thí dụ trực quan:

2.1. Public:

Giống như cái nhà mà không có cửa vậy, ai cần gì cứ việc vào lấy

Hướng dẫn protected trong php

Theo ví dụ dưới đây, ta có:

  • Viết một class cha có tên Person.

  • Đặt public cho hai biến $name và $age

  • Khởi tạo hàm tạo và các hàm get/set cho từng biến.

  • Viết lớp con có tên Female kế thừa lớp cha Person

  • Thêm biến $local và khởi tạo giống lớp cha Person

  • Khởi tạo đối tượng bên ngoài gọi đến hàm intro() bên trong lớp con để in ra giá trị.


DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
head>

<body>

    
    
    //Lớp cha
    class Person
    {
        public $name;
        public $age;

        public function __construct($name, $age)
        {
            $this->name = $name;
            $this->age = $age;
        }

        function set_name($name)
        {
            $this->name = $name;
        }

        function get_name()
        {
            return $this->name;
        }

        function set_age($age)
        {
            $this->age = $age;
        }

        function get_age()
        {
            return $this->age;
        }
    }


    //Lớp con
    class Female extends Person
    {
        public $local;
        public function __construct($name, $age, $local)
        {
            $this->name = $name;
            $this->age = $age;
            $this->local = $local;
        }

        public function intro()
        {
            echo "Tên: {$this->name} 
Tuổi: {$this->age}
Địa chỉ: {$this->local}"
; } } //Gọi đối tượng từ bên ngoài $female = new female("Lan", "30", "Ha Noi"); $female->intro(); ?>
body> html>

Hướng dẫn protected trong php
Kết quả:

2.2. Protected

Cổng nhà và cửa nhà đều khóa, trừ người bên trong, người bên ngoài không được lấy dùng cái gì trong nhà

Hướng dẫn protected trong php

  • Thực hiện sửa public ở các biến của class PersonFemale thành protected
        protected $name;
        protected $age;
        protected $local;
//Gọi đối tượng từ bên ngoài
    $female = new female("Lan", "30", "Ha Noi");
    $female->name;
    $female->local;

  • Chú ý, đặt chú thích cho lệnh kiểm tra lớp cha xong mới kiểm tra sang lớp con.
DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
head>

<body>

    
    class Person
    {
        protected $name;
        protected $age;

        public function __construct($name, $age)
        {
            $this->name = $name;
            $this->age = $age;
        }

        function set_name($name)
        {
            $this->name = $name;
        }

        function get_name()
        {
            return $this->name;
        }

        function set_age($age)
        {
            $this->age = $age;
        }

        function get_age()
        {
            return $this->age;
        }
    }

    class Female extends Person
    {
        protected $local;
        public function __construct($name, $age, $local)
        {
            $this->name = $name;
            $this->age = $age;
            $this->local = $local;
        }

        public function intro()
        {
            echo "Tên: {$this->name} 
Tuổi: {$this->age}
Địa chỉ: {$this->local}"
; } } //Gọi đối tượng từ bên ngoài $female = new female("Lan", "30", "Ha Noi"); //Lệnh gọi kiểm tra lớp cha //$female->name; //Lệnh gọi kiểm tra lớp con $female->local; ?>
body> html>

Hướng dẫn protected trong php
Kết quả:

2.3. Private

Bây giờ thì nhà của bố mẹ chỉ có bố mẹ được ở, con + người ngoài không được thừa kế bất cứ cái gì nhé

Hướng dẫn protected trong php
Hướng dẫn protected trong php
Hướng dẫn protected trong php

  • Thực hiện sửa protected ở các biến của class Person thành private
        private $name;
        private $age;
        private $local;

  • Thực hiện gọi từ bên ngoài
DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
head>

<body>

    
    class Person
    {
        private $name;
        private $age;
    
        public function __construct($name, $age)
        {
            $this->name = $name;
            $this->age = $age;
        }

        function set_name($name)
        {
            $this->name = $name;
        }

        function get_name()
        {
            return $this->name;
        }

        function set_age($age)
        {
            $this->age = $age;
        }

        function get_age()
        {
            return $this->age;
        }
    }

    class Female extends Person
    {
        private $local;
        public function __construct($name, $age, $local)
        {
            $this->name = $name;
            $this->age = $age;
            $this->local = $local;
        }

        public function intro()
        {
            echo "Tên: {$this->name} 
Tuổi: {$this->age}
Địa chỉ: {$this->local}"
; } } //Gọi đối tượng từ bên ngoài class Person $female = new Person(); $female->name = "Lan"; //Gọi đối tượng từ bên ngoài class con Female // $female2 = new female('Lan', '30', 'Ha Noi') //$female->local = "Hà Nội"; ?>
body> html>

Hướng dẫn protected trong php
Kết quả:

Hướng dẫn protected trong php
Cách làm tương tự với các hàm, khi bạn muốn giấu một hàm nào đó không cho bên ngoài sử dụng thì chỉ đơn giản gắn thuộc tính private cho nó là xong.

Lấy ví dụ ở class Female ở trên, ta gắn private cho hàm intro() :

private function intro()
        {
           echo "Tên: {$this->name} 
Tuổi: {$this->age}
Địa chỉ: {$this->local}"; }
  • Thực hiện gọi như sau:
    $female = new Female('Lan', '30', 'Ha Noi');
    $female->intro();

Hướng dẫn protected trong php
Kết quả:

Như vậy, trong lập trình hướng đối tượng chúng ta có 3 mức bảo vệ hàm và biến: Public, Protected và Private.

Hiểu được cách thức cũng như cơ chế hoạt động của 3 thuộc tính này trong PHP để thao tác với biến và hàm linh hoạt và thông minh hơn nhé!

Cảm ơn đã xem và hẹn gặp lại trong những bài viết sau!

Hướng dẫn protected trong php
Hướng dẫn protected trong php

Hướng dẫn protected trong php
𝔑𝔥ậ𝔱 𝔏𝔞𝔪
Hướng dẫn protected trong php