PHP 7.1 起类常量支持 public、protected、private 显式访问控制,终结此前强制 public 的“裸奔”时代,实现与属性、方法一致的封装能力。

PHP 7.1 是类常量访问控制的分水岭版本。在此之前,所有类常量默认且**唯一**是 public 的,无法显式限制访问范围;从 PHP 7.1 起,public、protected、private 三种修饰符全部可用,常量可见性规则与属性、方法完全对齐。
PHP 7.1 之前:常量“裸奔”时代
类中定义的 const 全部隐式为 public,没有语法支持声明其他可见性:
- 任何地方都能直接通过
ClassName::CONST_NAME访问 - 子类可继承并直接使用,外部代码也可随意读取
- 敏感值(如密钥、超时配置)无法隐藏,封装形同虚设
- 即便仅用于内部逻辑,也必须对外暴露,违背信息隐藏原则
PHP 7.1 起:显式声明可见性成为标准能力
现在必须明确写出修饰符,不写会报语法错误;默认不再存在,必须选择一种:
- public const:行为与旧版一致,仍可全局访问
-
protected const:仅本类和子类内可通过
self::或static::访问 - private const:严格限定在定义该常量的类内部,子类不可见,外部不可触达
关键变化点总结
不是“新增功能”,而是修正语言设计缺陷:
立即学习“PHP免费学习笔记(深入)”;
- 旧版无访问控制 → 新版强制显式声明,消除隐式假设
- 旧版无法封装内部常量 → 新版允许用
private const实现真正私有状态 - 旧版子类可任意依赖父类常量 → 新版用
protected明确授权继承关系 - 旧版常量与配置混杂难区分 → 新版可通过修饰符直观表达设计意图



















