在 PHP 中受保護

PHPz
發布: 2024-08-29 13:08:26
原創
1019 人瀏覽過

關鍵字基本上是一組特殊單詞,在每種程式語言中出於特定目的而保留。它們可以是命令,也可以是參數,並且不能像變數名稱一樣通用。 PHP 中的 protected 是在包括 PHP 在內的所有語言中預先定義的,也稱為保留名稱。

廣告 該類別中的熱門課程 PHP 開發人員 - 專業化 | 8 門課程系列 | 3次模擬測驗

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

PHP中有5種訪問修飾符:

  • 公開
  • 私人
  • 受保護
  • 摘要
  • 決賽

本文中我們將只關注受保護的存取修飾符。除了變數之外,protected 關鍵字還用於將方法/函數和屬性宣告為受保護。除非明確指定,否則所有變數和方法預設都是公共的。受保護的變數降低了對應變數或方法的可見性,因為它的存取僅限於聲明它的類別。受保護的存取修飾符不能套用於類別。

但是,它們可以由從其父類別繼承的子類別呼叫。因此,可以透過在所需方法或變數前面新增「protected」關鍵字來將其宣告為受保護。

文法

<?php
//declaration of protected variable
protected $<variable_name> = value;
//declaration of protected property
protected $proc = 'protected property';
//declaration of protected function
protected function function_name(){
//PHP code goes here
}
?>
登入後複製

在這裡我們可以看到,使用 protected 關鍵字我們宣告了變數和函數名稱。

protected 修飾符在 PHP 中的工作:與 private 存取修飾符一樣,我們也可以使用 protected 來限制類別外部的類別函數和變數的使用和存取。但受保護的私有變數的一個例外是,可以透過子類別中的父類別繼承來存取它們。

受保護變數與方法的範例

讓我們透過下面一個簡單的例子來詳細了解 protected 修飾符的用法和工作原理:

範例#1

代碼:

<?php
// Declaration of Main class
class Math {
protected $a = 30;
protected $b = 10;
// Declaration of division function
function division()
{
echo $div=$this->a/$this->b;
echo "\n";
}
protected function multiply()
{
echo $mul=$this->a*$this->b;
echo "\n";
}
}
// Declaration of child class addn inherited from above class
class addn extends Math {
// Declaration of addition function
function addition()
{
echo $division=$this->a+$this->b;
}
}
$obj= new addn;
$obj->division();
$obj->addition();
$obj->multiply();
?>
登入後複製

輸出:

在 PHP 中受保護

在第 29 行註解後,嘗試呼叫受保護的方法

在 PHP 中受保護

在上面的範例中,我們展示了不同的數學運算,例如加法、除法和乘法。首先,我們宣告不帶任何存取修飾符的 Division() 函數。因此,預設情況下,它是公共的,當我們透過建立其物件來呼叫該函數時,我們對變數 a 和 b 執行的除法值將顯示在輸出中。但當我們嘗試呼叫受保護的函數multiply()時,我們得到內聯34錯誤,指出受保護的方法無法被呼叫。

而我們可以透過繼承呼叫並取得受保護方法的值,如圖所示。這裡的子類別 and 是從父類別 Math 繼承的,因此我們能夠呼叫受保護的變數 a 和 b 而不會出現任何錯誤。

範例#2

代碼:

<?php
class Animal {
// Declaration of protected variable $animal
protected $animal = array("Dog", "Cat", "Cow");
// Declaration of protected function for Animal description
protected function getDescription($animal) {
if($animal == "Dog") {
echo "Dogs are the most loyal animals";
}
else if($animal == "Cat") {
echo "Cats are very smart";
}
else if($animal == "Cow") {
echo "Cows are worshipped in India";
}
}
}
// Declaration of sub class of above Animal class
class Dog extends Animal {
protected $animal = "Dog";
// Declaration of public function to print dog's description
public function getDogDescription() {
// Here we call the protected getDescription() method of parent class Animal
$this->getDescription($this->animal);
}
}
// Creating an object of class Animal
$animal = new Animal();
// Creating an object of subclass Dog
$dog = new Dog();
/*
Trying to access protected variables and methods
*/
echo $animal->animal; // Cannot be accessed
$animal->getDescription("Dog"); // Cannot be accessed
echo $dog->animal; // Cannot be accessed
/*
We can call getDogDescription method,
in which we are calling a protected method
of Animal class
*/
$dog->getDogDescription();
?>
登入後複製

輸出:

在 PHP 中受保護

評論第 34 行後

在 PHP 中受保護

註第 35 行和 36 行後

在 PHP 中受保護

在這個例子中,我們首先聲明主父類 Animal 並將受保護的變數初始化為 $animal,它是一個包含 3 個不同動物名稱的陣列。接下來,我們還聲明一個受保護的函數,在該函數中我們為數組中的每個動物提供唯一的描述。

由於可以使用子類別存取受保護的變量,因此我們在這裡從父類別 Animal 建立另一個子類別 Dog。另外為了展示公共函數可以在任何地方訪問,我們聲明一個公共函數來輸出變數dog的描述。

接下來,我們建立 Animal 類別和 Dog 類別的對象,並嘗試存取它們受保護的變數。因此,對於第 40、41 和 42 行,我們收到一個致命錯誤,告知受保護的屬性/方法/變數無法存取。因此,我們無法存取 Animal 類別之外的任何變量,因為所有變數都受到保護。

PHP 中受保護的重要性

  • protected 修飾符基本上降低了變數/方法的可見性,因此比可以在任何地方存取的 public 存取修飾符更安全。
  • 只有子類別可以存取受保護的方法,任何類別都不能存取。
  • 當我們將其設定為受保護時,該類別的實用性就變得非常清楚。當有一堆數據並且我們需要在這上面做一個明確的標記時,這真的很有幫助。
  • 受保護的變數和成員對於聲明它們的類別是公共的,並且它的子類別從父類別繼承此屬性。
  • 它提供二級安全性,比最安全的 private 低一級,僅次於較不安全的 public 修飾符。
  • 它幫助開發人員描述可共享成員和不可共享成員,並幫助將它們限制在類別的範圍內。

結論

因此,受保護的變數是用來控制類別中專門定義的變數或方法或屬性的存取修飾符。它需要透過前綴明確指定,因此只能在其聲明的包內以及從父包繼承的子類中存取。

以上是在 PHP 中受保護的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!