php 8 类常量必须显式声明 public/protected/private 可见性,默认 public;支持 php 8.3+ 类型化声明,如 public string const service_name = 'auth'。

PHP 8 中类常量的可见性设置方式与 PHP 7.1 起引入的机制完全一致,**必须显式使用 public、protected 或 private 关键字声明**,不写修饰符时仍默认为 public(但强烈建议显式写出,提高可读性和维护性)。
基本语法:三种可见性怎么写
在 class 内部定义 const 时,直接在 const 前加访问控制关键字:
-
public:类内、子类、外部均可访问
public const API_VERSION = 'v2'; -
protected:仅类自身和子类可访问,外部不可读
protected const DEFAULT_RETRY = 3; -
private:仅当前类内部可通过
self::访问,子类和外部均不可见private const DB_HOST = 'localhost';
关键规则:不能跨范围访问
违反可见性会触发 Fatal error,不是警告或 Notice:
-
Config::DB_HOST→ 致命错误:Cannot access private constant -
ChildConfig::DEFAULT_RETRY→ 致命错误:Cannot access protected constant(若在外部调用) - 子类中重写
private const是无效的(不会覆盖,而是定义了一个新私有常量)
PHP 8 新增支持:类型化类常量
PHP 8.3+ 允许为类常量声明标量类型(string、int、array 等),且类型声明需与可见性共存:
public string const SERVICE_NAME = 'auth';private array const ALLOWED_METHODS = ['GET', 'POST'];- 注意:
array常量内容只能含标量值(不能含对象、资源、闭包等)
实际使用建议
按用途选可见性,避免“全 public”惯性:
- 对外提供配置项(如超时、开关)→ 用 public
- 供子类继承扩展的模板值(如默认分页数)→ 用 protected
- 纯内部逻辑用值(密钥、路径片段、状态码映射)→ 必须用 private
- 所有常量都应命名清晰,推荐 PascalCase(如
MaxConnectionCount)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











