类常量用于定义类中不变的值,适合存储配置、状态码等;使用const关键字定义,名称大写加下划线分隔;通过类名::常量名访问,无需实例化;应用于状态管理、配置参数、错误码、权限角色等场景;具有编译时确定、不可重写、默认public等特性;可结合静态方法实现校验逻辑,提升代码可读性和维护性。

PHP类常量用于定义在类中不会改变的值,适合存储配置信息、状态码、固定规则等。它们在类加载时就确定,无需实例化对象即可访问,提高了代码的可读性和维护性。
类常量的基本语法
使用 const 关键字定义类常量,名称通常大写,多个词以下划线分隔:
class Status {
const PENDING = 'pending';
const APPROVED = 'approved';
const REJECTED = 'rejected';
}
通过类名和作用域解析操作符(::)访问:
echo Status::PENDING; // 输出: pending
在实际开发中的常见应用场景
类常量广泛应用于以下几种情况:
立即学习“PHP免费学习笔记(深入)”;
Avactis是一个强大的PHP在线购物系统拥有多个版本包括开源版本。它具备一个在线购物系统所需要的所有功能从产品到会员管理,订单和营销。可以无限分类和为产品指定任务数量的图片(支持自动生成缩略图)。使用自定义字段功能,让你可以更好地定义一个产品。该系统提供以非常灵活的方式来创建任意类型的促销活动如设置折扣代码,基于价格的折扣或基于数量的折扣等。
- 状态码管理:如订单状态、用户审核状态,避免在代码中硬编码字符串或数字。
- 配置参数:定义API地址、超时时间、分页数量等固定配置。
- 错误码与消息:统一管理错误类型,便于国际化或多环境适配。
- 权限角色:定义用户角色常量,提高权限判断的清晰度。
class UserRole {
const ADMIN = 'admin';
const EDITOR = 'editor';
const GUEST = 'guest';
}
if ($user->role === UserRole::ADMIN) {
// 执行管理员操作
}
类常量的特性与注意事项
理解其行为有助于正确使用:
- 不能被重写(除非用子类重新定义),不具备继承覆盖能力。
- 不能使用 $this 或 self 访问,只能通过类名::常量名调用。
- 值必须是编译时确定的标量或数组(PHP 5.6+ 支持数组)。
- 不支持访问控制修饰符(public/private/protected),默认为 public。
结合静态方法提升可用性
常配合静态方法做校验或转换:
class OrderStatus {
const CREATED = 1;
const PAID = 2;
const SHIPPED = 3;
public static function isValid($status) {
return in_array($status, [self::CREATED, self::PAID, self::SHIPPED]);
}
}
// 使用
if (OrderStatus::isValid($status)) {
// 处理有效状态
}
基本上就这些。合理使用类常量能让代码更整洁、减少魔数、提升协作效率。不复杂但容易忽略细节,比如命名规范和不可变性,掌握好对项目结构帮助很大。









