PHP 通过访问控制关键字 public、private 和 protected 实现封装,这是 OOP 的重要原则之一。
封装是指使对象的数据成员或属性远离类外部环境的机制,仅允许通过类中可用的方法或函数进行受控访问。
下图说明了面向对象编程方法中的封装原理。

PHP 关键字列表包含以下关键字,这些关键字确定对象的属性和方法的可访问性,该对象是 PHP 中类的实例 -
关键字 | 描述 |
---|---|
Public | 可以从任何位置访问类成员,甚至可以从类范围之外访问,但只能通过对象引用访问。 |
Private | 可以在类本身中访问类成员。它阻止成员从类外部访问,即使使用类实例的引用也是如此。 |
Protected | 只能在类及其子类中访问成员,而不能在其他任何位置访问。 |
这三个关键字 “public, private 和 protected” 通常称为访问修饰符。它们也称为可见性模式,因为它们决定某个类成员的可用程度。
公有成员:public
在 PHP 中,类成员(成员变量和成员函数)默认是公有的。
在下面的程序中,对象的成员变量 title 和 price 可以在类外部自由访问,因为如果没有另行指定,它们在默认情况下是 public 的。
它将产生以下输出 -
Age: 28
Name : Ravi Age: 28
请注意,默认情况下,所有类成员的属性都是 public,如果需要,可以将它们显式声明为 public。因此,可以从类外部调用实例方法 getName() 和 getAge()。
由于属性 name 和 age 也是公开的,因此它们也可以在类之外访问,根据封装原则,这不是需要的。
私有成员:Private
如上所述,封装原则要求成员变量不应直接访问。只有方法才应具有对数据成员的访问权限。因此,我们需要将成员变量设为 private 并将方法设为 public。
让我们将 name 和 age 属性的声明更改为 private 并运行以下 PHP 脚本 -
它将产生以下输出 -
Age: 28
PHP Fatal error: Uncaught Error: Cannot access private property Person::$name in person.php:27
错误消息告知无法从 public 范围访问 private 属性的原因。
受保护成员:protected
在类继承的情况下,指定对类成员的受保护访问的效果是有效的。我们知道,公共成员可以从类以外的任何位置访问,而私有成员被拒绝从类以外的任何位置访问。
protected 关键字授予对同一类的对象及其继承类的对象的访问权限,从而拒绝任何其他环境访问该对象。
让我们继承 person 类并定义一个 student 类。我们将 name property 从 private 更改为 protected。student 类有一个新的公共方法 getDetails(),用于打印 name 和 age 属性的值。
Person 类
Student 类
它将产生以下输出 -
PHP Warning: Undefined property: student::$age in person.php on line 28
My age:
下表说明了 PHP 中类成员的可访问性规则 -