PHP面向对象:Public、Protected与Private属性
在PHP的面向对象编程中,类成员属性有三种不同的访问控制级别,分别是public、protected和private。本节将介绍这三种级别的特点以及如何使用它们。
1. 定义一个包含不同访问控制级别属性的类
首先,我们需要定义一个类,并在其中包含public、protected和private三种访问控制级别的属性。这样可以方便我们理解它们之间的差异。
```php
class MyClass {
public $publicProperty 'public';
protected $protectedProperty 'protected';
private $privateProperty 'private';
}
```
在上述代码中,我们定义了一个名为MyClass的类,其中包含了三个属性,分别是publicProperty、protectedProperty和privateProperty。它们的访问控制级别分别为public、protected和private。
2. 实例化并调用public属性
接下来,我们可以实例化这个类,并尝试调用其中的public属性。
```php
$obj new MyClass();
echo $obj->publicProperty;
```
由于public属性具有公共访问控制级别,因此我们可以在类结构之外直接访问它。所以,上述代码会正常输出publicProperty属性的值。
3. 访问protected和private属性
然而,如果我们试图访问protected或private属性,就会遇到问题。因为这两种访问控制级别的属性不能在类结构之外被调用,它们受到类结构的保护。
```php
echo $obj->protectedProperty; // 报错!无法访问protected属性
echo $obj->privateProperty; // 报错!无法访问private属性
```
上述代码会导致错误,因为我们无法在类结构之外访问protected和private属性。
4. 子类访问父类的public属性
接着,我们可以定义一个子类,并在其中创建一个成员方法来访问父类的public属性。
```php
class ChildClass extends MyClass {
public function printProp() {
echo 'In sub class: ' . $this->publicProperty;
}
}
$obj2 new ChildClass();
$obj2->printProp();
```
在上述代码中,我们创建了一个名为ChildClass的子类,它继承自MyClass。子类中的printProp方法可以正常访问父类的public属性,并将其值打印输出。
5. 子类访问父类的protected属性
我们可以修改printProp方法,使其能够访问父类的protected属性。
```php
class ChildClass extends MyClass {
public function printProp() {
echo 'In sub class: ' . $this->protectedProperty;
}
}
$obj2 new ChildClass();
$obj2->printProp();
```
在上述代码中,我们修改了printProp方法,使其能够访问父类的protected属性。同样地,我们可以正常访问到父类的protected属性,并将其值打印输出。
6. 子类无法访问父类的private属性
然而,如果我们试图访问父类的private属性,就会遇到问题。因为private属性只能在类结构内部被调用,无法通过子类来访问。
```php
class ChildClass extends MyClass {
public function printProp() {
echo 'In sub class: ' . $this->privateProperty; // 报错!无法访问private属性
}
}
$obj2 new ChildClass();
$obj2->printProp();
```
上述代码会导致错误,因为我们无法通过子类访问父类的private属性。
在PHP的面向对象编程中,了解和正确使用不同访问控制级别的属性是非常重要的。public属性具有最高的访问权限,可以在类结构之外直接访问。而protected属性和private属性则受到类结构保护,只能在类内部或子类中访问。这些访问控制级别的灵活运用可以帮助我们更好地组织和管理代码。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。