关键字基本上是一组特殊单词,在每种编程语言中出于特定目的而保留。它们可以是命令,也可以是参数,并且不能像变量名一样通用。 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 修饰符的用法和工作原理:
代码:
<?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(); ?>
输出:
在第 29 行注释后,尝试调用受保护的方法
在上面的示例中,我们展示了不同的数学运算,例如加法、除法和乘法。首先,我们声明不带任何访问修饰符的 Division() 函数。因此,默认情况下,它是公共的,并且当我们通过创建其对象来调用该函数时,我们对变量 a 和 b 执行的除法值将显示在输出中。但是当我们尝试调用受保护的函数multiply()时,我们得到内联34错误,指出受保护的方法无法被调用。
而我们可以通过继承调用并获取受保护方法的值,如图所示。这里的子类 and 是从父类 Math 继承的,因此我们能够调用受保护的变量 a 和 b 而不会出现任何错误。
代码:
<?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(); ?>
输出:
评论第 34 行后
注释第 35 行和 36 行后
在这个例子中,我们首先声明主父类 Animal 并将受保护的变量初始化为 $animal,它是一个包含 3 个不同动物名称的数组。接下来,我们还声明一个受保护的函数,在该函数中我们为数组中的每个动物提供唯一的描述。
由于可以使用子类访问受保护的变量,因此我们在这里从父类 Animal 创建另一个子类 Dog。另外为了展示公共函数可以在任何地方访问,我们声明一个公共函数来输出变量dog的描述。
接下来,我们创建 Animal 类和 Dog 类的对象,并尝试访问它们受保护的变量。因此,对于第 40、41 和 42 行,我们收到一个致命错误,告知受保护的属性/方法/变量无法访问。因此,我们无法访问 Animal 类之外的任何变量,因为所有变量都受到保护。
因此,受保护的变量是用于控制类中专门定义的变量或方法或属性的访问修饰符。它需要通过前缀显式指定,因此只能在其声明的包内以及从父包继承的子类中访问。
以上是在 PHP 中受保护的详细内容。更多信息请关注PHP中文网其他相关文章!