在 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学习者快速成长!