2016 - 2024

感恩一路有你

PHP面向对象:Public、Protected与Private属性

浏览量:1502 时间:2024-01-27 09:02:01 作者:采采

在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属性则受到类结构保护,只能在类内部或子类中访问。这些访问控制级别的灵活运用可以帮助我们更好地组织和管理代码。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。