PHP 属性(也称为成员变量)的访问控制主要遵循以下规则:
公共属性(Public):
公共属性可以在任何地方被访问,包括类的内部、子类和类的外部(通过对象实例)。公共属性的值对所有实例共享。受保护属性(Protected):
受保护属性只能在类的内部以及继承该类的子类中被访问。受保护属性的值仅对类及其子类可见,不会对外部暴露。私有属性(Private):
私有属性仅在类的内部可见,即使是继承该类的子类也无法访问。私有属性的值对所有外部实体都是隐藏的,只能通过公共或受保护的 getter 和 setter 方法进行访问和修改。默认访问控制(None):
如果不显式指定访问控制修饰符(public, protected, 或 private),则属性默认为“受保护”(protected)。这意味着属性可以在类的内部被访问,但不能在类的外部通过对象实例直接访问。构造函数中的属性初始化:
构造函数允许在创建对象时初始化属性。可以在构造函数中使用公共、受保护或私有属性,具体取决于设计需求。属性访问器(Getter)和修改器(Setter):
可以为属性定义访问器(getter)方法来读取属性值。可以定义修改器(setter)方法来设置属性值。访问器和修改器方法可以是公共、受保护或私有的,以控制属性的访问级别。属性类型声明:
PHP 允许在类定义时为属性指定类型声明(如 int, string, bool 等)。类型声明会强制要求赋给属性的值符合指定的类型,否则会引发错误。属性默认值:
可以在类定义时为属性指定默认值。如果未显式设置属性值,则将使用默认值。属性不可变性:
可以通过将属性声明为私有来使属性不可变,这样就无法在类的外部修改其值。对于公共属性,可以通过定义 getter 方法来控制其值的读取,并在 getter 方法内部决定是否允许修改。属性继承:
在 PHP 中,属性不是被子类继承的,但子类可以通过 super 关键字访问父类的受保护属性。请注意,PHP 中的访问控制规则主要适用于公共、受保护和私有属性。默认访问控制(none)实际上等同于受保护属性,但在实际编程中并不常用。此外,PHP 7 引入了标量表达式类型声明,允许在类定义时为属性指定标量类型(如 int, float, string, bool, array, callable, iterable, object)。