public、protected、private 是 php 类中控制成员访问范围的核心修饰符:public 全局可见;protected 仅限本类及子类访问;private 仅本类内部可访问,三者共同支撑封装设计。

PHP类中,public、protected、private 是控制成员(属性和方法)可访问范围的核心修饰符。它们不是语法糖,而是封装设计的基石——决定谁能看到、调用或修改你的类内部结构。
public:完全开放,无访问限制
被声明为 public 的成员,可以在任何地方访问:类内部、子类中、以及通过对象实例在类外部直接调用。
- 属性或方法加
public前缀后,相当于“全局可见” - 未显式指定修饰符的属性(PHP 7.1 之前允许),默认就是
public;但 PHP 7.1+ 要求属性必须明确声明修饰符,否则报错 - 适合工具型方法(如格式化字符串)、公开配置项等需要灵活调用的场景
protected:仅限继承体系内使用
protected 成员只能在定义它的类内部、以及所有直接或间接继承它的子类中访问,**不允许通过对象实例在类外部调用**。
- 父类的
protected属性/方法,在子类中可用$this->xxx访问 - 子类可以重写(覆盖)父类的
protected成员,但不能访问父类的private成员 - 常用于核心逻辑封装,比如数据库连接初始化、通用验证流程——不对外暴露,但允许子类复用和定制
private:严格私有,仅本类可见
private 是最严格的访问控制,成员**只能在声明它的那个类内部访问**,连子类也不行。
- 子类中即使定义同名
private属性,也和父类的完全无关,是两个独立存储 - 无法被继承、无法被覆盖、无法被外部或子类直接读取或调用
- 典型用途包括:内部状态标记(如是否已初始化)、敏感缓存数据、仅用于当前类算法的辅助方法
实际编码建议
遵循“最小暴露原则”能显著提升代码健壮性:
- 属性尽量不设为
public,优先用private+ 提供受控的 getter/setter 方法 - 若需子类扩展行为,用
protected;若确定只在当前类用,就用private - 方法默认不要设为
public,除非你明确希望它被外部调用 - 从 PHP 8.4 开始支持不对称属性可见性(如只读 public get / protected set),可进一步细化控制
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











