Hướng dẫn what is protected access specifier in php? - chỉ định truy cập được bảo vệ trong php là gì?

Để đặt quyền truy cập cho các phương thức và biến lớp, chúng tôi sử dụng các sửa đổi truy cập không có gì ngoài các từ khóa PHP. Chúng tôi thậm chí có thể chỉ định một số bộ sửa đổi truy cập này cho bản thân lớp để làm cho lớp hoạt động theo một cách đặc biệt.

Sau đây là các từ khóa PHP được sử dụng làm bộ điều chỉnh truy cập cùng với ý nghĩa của chúng:keywords which are used as access modifiers along with their meaning:

  1. public: Khi chúng tôi xác định các thành viên lớp là công khai, thì họ có thể truy cập từ bất cứ đâu, ngay cả từ bên ngoài phạm vi lớp.
  2. private: Khi chúng tôi xác định các thành viên lớp là riêng tư, họ chỉ có thể được truy cập từ bên trong lớp.
  3. protected: Điều này giống như riêng tư, với một ngoại lệ, các thành viên lớp được xác định là được bảo vệ vẫn có thể được truy cập từ lớp con của nó (chúng ta sẽ tìm hiểu về các lớp con khi chúng ta sẽ tìm hiểu về kế thừa).
  4. 0: Từ khóa này chỉ được sử dụng cho các lớp PHP và các chức năng thành viên của nó.
  5. 1: Các phương thức lớp được xác định là cuối cùng, không thể thay đổi hoặc ghi đè bởi bất kỳ lớp con nào.

Khi nào nên sử dụng trình sửa đổi truy cập nào

Chúng tôi không thể sử dụng tất cả các sửa đổi truy cập có sẵn với lớp, varibales và phương thức của nó. Trong bảng bên dưới, chúng tôi đã chỉ định trình định thức truy cập nào được áp dụng cho những gì:

Modifer truy cậpcác lớp họcchức năngbiến
public Không áp dụngÁp dụngÁp dụng
private Không áp dụngÁp dụngÁp dụng
protected Không áp dụngÁp dụngÁp dụng
abstract Áp dụngÁp dụngKhông áp dụng
final Áp dụngÁp dụngKhông áp dụng

Áp dụng


Bây giờ chúng ta đã biết công cụ sửa đổi truy cập nào được sử dụng ở đâu, hãy tìm hiểu về các công cụ sửa đổi truy cập chi tiết cùng với các ví dụ.

public Công cụ sửa đổi truy cập

Nếu chúng tôi không chỉ định bất kỳ công cụ sửa đổi quyền truy cập nào, tất cả các lớp và các thành viên của nó được coi là public theo mặc định.

Như đã đề cập trong bảng trên, các sửa đổi truy cập public, private hoặc protected không thể được sử dụng với lớp. Hãy xem những gì xảy ra nếu chúng ta làm,

Lỗi phân tích cú pháp: lỗi cú pháp, 'công khai' (t_public) bất ngờ trong ...

Chúng tôi sẽ nhận được lỗi trên.

Nhưng đối với các phương thức và biến lớp, chúng tôi nên chỉ định các nhà xác định truy cập mặc dù theo mặc định, chúng được coi là công khai.

Đây là một ví dụ đơn giản về lớp PHP:

Trong mã trên, chúng tôi đã sử dụng từ khóa

7 trước biến lớp. Nếu chúng tôi không sử dụng
7, chúng tôi sẽ gặp lỗi phân tích cú pháp.

Nhưng thay vì sử dụng

7, chúng ta cũng có thể sử dụng các từ khóa sửa đổi truy cập trước khi phân rã biến lớp, ví dụ:


Đây là cách chúng ta nên tạo một lớp PHP, đó là thực tiễn lập trình tốt để chỉ định các bộ sửa đổi truy cập cùng với các biến và phương thức của lớp.

private Công cụ sửa đổi truy cập

fname = $fname;
        }
        
        // public function to set value for lname
        public function setLName($lname) {
            $this->lname = $lname;
        }
        
        // public function to 
        public function showName() {
            echo "My name is: " . $this->fname . " " . $this->lname;
        }
    }
    
    // creating class object
    $john = new Person();
    
    // trying to access private class variables
    $john->fname = "John";  // invalid
    $john->lname = "Wick";  // invalid
    
    // calling the public function to set fname and lname
    $john->setFName("John");
    $john->setLName("Wick");

?>

Chúng ta có thể sử dụng Trình sửa đổi truy cập private cho các biến và phương thức lớp nhưng không phải cho lớp PHP. Khi một thành viên lớp - một biến hoặc một hàm, được khai báo là private thì nó không thể được truy cập trực tiếp bằng cách sử dụng đối tượng của lớp. Ví dụ:

Trong mã trên,

3 và
4 là các biến lớp riêng, do đó chúng ta không thể trực tiếp truy cập chúng bằng đối tượng lớp.

setFName("John");
?>

Vì vậy, khi chúng tôi cố gắng thực thi dòng mã sau:

Chúng tôi sẽ gặp lỗi PHP gây tử vong:

Lỗi chết người: Không thể truy cập vào tài sản riêng :: $ fname trong ...Getters and Setters.

name = $name;
        }
        
        // public function to get value of name (getter method)
        public function getName() {
            return $this->name;
        }
    }
    
    // creating class object
    $john = new Person();
    
    // calling the public function to set fname
    $john->setName("John Wick");
    
    // getting the value of the name variable
    echo "My name is " . $john->getName();

?>

Nhưng chúng ta có thể dễ dàng truy cập các biến riêng tư của một lớp bằng cách xác định các chức năng công cộng trong lớp. Chúng ta có thể tạo các chức năng riêng biệt để đặt giá trị thành các biến riêng tư và để nhận giá trị của chúng. Các chức năng này được gọi là getters và setters.

Tên tôi là John Wick


Chúng ta nên có các phương thức Getter và Setter cho tất cả các biến riêng trong lớp.

protected Công cụ sửa đổi truy cập

Giống như trình sửa đổi truy cập private, protected Modifer truy cập cũng hạn chế truy cập các biến và phương thức lớp bên ngoài lớp. Nhưng các biến và hàm của lớp ____9 có thể được truy cập bên trong lớp và bên trong lớp con (một lớp kế thừa lớp).

Chúng ta sẽ học cách tạo ra một lớp con và về khái niệm về sự kế thừa trong các hướng dẫn sắp tới.

getFeatures($this->gender);
        }
    }
    
    // object of Human class
    $human = new Human();
    // object of Male class
    $male = new Male();
    
    /*  
        accessing protected variables and methods
    */
    echo $human->genders;   // INVALID
    $human->getFeatures("Male");    // INVALID
    echo $male->gender;     // INVALID
    
    /*
        but we can call getMaleFeatures method,
        in which we are calling a protected method 
        of Human class
    */
    $male->getMaleFeatures();

?>

Hãy lấy một ví dụ nhanh chóng và đơn giản:

Trong chương trình trên, chúng tôi đã xác định hai lớp,

9 và
fname = $fname;
        }
        
        // public function to set value for lname
        public function setLName($lname) {
            $this->lname = $lname;
        }
        
        // public function to 
        public function showName() {
            echo "My name is: " . $this->fname . " " . $this->lname;
        }
    }
    
    // creating class object
    $john = new Person();
    
    // trying to access private class variables
    $john->fname = "John";  // invalid
    $john->lname = "Wick";  // invalid
    
    // calling the public function to set fname and lname
    $john->setFName("John");
    $john->setLName("Wick");

?>
0. Lớp
fname = $fname;
        }
        
        // public function to set value for lname
        public function setLName($lname) {
            $this->lname = $lname;
        }
        
        // public function to 
        public function showName() {
            echo "My name is: " . $this->fname . " " . $this->lname;
        }
    }
    
    // creating class object
    $john = new Person();
    
    // trying to access private class variables
    $john->fname = "John";  // invalid
    $john->lname = "Wick";  // invalid
    
    // calling the public function to set fname and lname
    $john->setFName("John");
    $john->setLName("Wick");

?>
0 là một lớp con của lớp
9.

Trong lớp

9, tất cả các biến và phương thức lớp là protected, do đó chúng không thể được truy cập từ bên ngoài lớp, nhưng chúng có thể được truy cập bên trong lớp con của lớp
9.Inheritance, we will again re-visit this, when we will learn about Inheritance.


Đừng lo lắng nếu điều này có vẻ khó hiểu do khái niệm thừa kế, chúng ta sẽ một lần nữa ghé thăm lại điều này, khi chúng ta sẽ tìm hiểu về thừa kế.

0 Công cụ sửa đổi truy cập

Trình sửa đổi truy cập

0 được sử dụng với lớp PHP và các chức năng của nó. Nó không thể được sử dụng cho các biến lớp.

Ngoài ra, PHP không cho phép khởi tạo lớp trừu tượng, tức là bạn không thể tạo đối tượng của lớp

0, mặc dù các lớp này có thể được kế thừa.

Chúng tôi sẽ tìm hiểu về công cụ sửa đổi truy cập này một cách chi tiết khi chúng tôi sẽ bao gồm các lớp và giao diện trừu tượng.


1 Công cụ sửa đổi truy cập

Khi chúng tôi khai báo một lớp là

1, sử dụng công cụ sửa đổi truy cập này, thì lớp đó không thể được kế thừa.

Tương tự, khi chúng ta xác định hàm lớp là

1, PHP hạn chế các lớp con của lớp đó ghi đè hàm đó được khai báo là
1.

Một lần nữa, chúng tôi sẽ giải thích điều này với sự giúp đỡ của các ví dụ khi chúng tôi sẽ tìm hiểu về thừa kế.



Trình xác định truy cập được bảo vệ là gì?

Nhận xét. Từ khóa được bảo vệ chỉ định quyền truy cập vào các thành viên lớp trong danh sách thành viên cho đến trình xác định truy cập tiếp theo (công khai hoặc riêng tư) hoặc kết thúc định nghĩa lớp. Các thành viên lớp được tuyên bố là được bảo vệ chỉ có thể được sử dụng bởi các chức năng sau: Các chức năng thành viên của lớp ban đầu tuyên bố các thành viên này.specifies access to class members in the member-list up to the next access specifier ( public or private ) or the end of the class definition. Class members declared as protected can be used only by the following: Member functions of the class that originally declared these members.

Biến được bảo vệ trong PHP là gì?

Được bảo vệ :: Một biến hoặc phương thức được bảo vệ không thể được truy cập bởi người dùng của lớp nhưng có thể được truy cập bên trong một lớp con kế thừa từ lớp.RIÊNG TƯ :: Một biến hoặc phương thức riêng tư chỉ có thể được truy cập nội bộ từ lớp mà nó được xác định.cannot be accessed by users of the class but can be accessed inside a subclass that inherits from the class. Private :: A private variable or method can only be accessed internally from the class in which it is defined.

Các nhà xác định truy cập trong PHP là gì?

Có 3 loại chỉ định truy cập có sẵn trong PHP, công khai, riêng tư và được bảo vệ.Công khai - Các thành viên trong lớp với công cụ sửa đổi truy cập này sẽ có thể truy cập công khai từ bất cứ đâu, ngay cả từ bên ngoài phạm vi của lớp.Private - Thành viên lớp có từ khóa này sẽ được truy cập trong chính lớp.Public, Private and Protected. Public - class members with this access modifier will be publicly accessible from anywhere, even from outside the scope of the class. Private - class members with this keyword will be accessed within the class itself.

Công cụ sửa đổi truy cập được bảo vệ là gì?

Công cụ sửa đổi được bảo vệ chỉ định rằng thành viên chỉ có thể được truy cập trong gói riêng của mình (như với gói riêng) và ngoài ra, bởi một lớp con của lớp trong một gói khác.specifies that the member can only be accessed within its own package (as with package-private) and, in addition, by a subclass of its class in another package.