php 8.3推荐使用const定义全局/类/接口常量,支持类型声明和表达式;define()用于动态场景但无类型支持;类常量自8.1起支持可见性修饰符,枚举自8.1起提供类型安全的命名常量。

如果您在PHP最新版本中需要定义常量,但不确定应使用哪种语法或函数,可能是由于PHP 8.x系列对常量定义机制引入了更严格的语义与上下文限制。以下是适用于PHP最新版(截至2026年4月,主流为PHP 8.3)的多种常量定义方法:
一、使用const关键字在全局作用域定义常量
const是编译时解析的语法结构,适用于脚本顶层、类内、接口内及枚举内,定义后不可修改,且支持类型声明(PHP 7.4+)和表达式(PHP 8.0+)。该方式性能更高,推荐用于静态已知值。
1、在PHP文件顶部直接使用const定义标量常量:
const APP_NAME = "MyApp";
2、定义带类型提示的常量(PHP 8.0+):
const int MAX_RETRY = 3;
3、使用表达式初始化(PHP 8.0+,仅限字面量表达式):
const IS_PRODUCTION = $_SERVER['APP_ENV'] === 'prod'; // ❌ 错误:运行时变量不允许
const IS_DEBUG = true; // ✅ 正确:布尔字面量
二、使用define()函数定义全局常量
define()是运行时函数调用,兼容性广,仍被PHP 8.3完全支持,可用于动态生成常量名或条件定义,但不支持类型声明,且无法在类/接口/枚举内部使用。
1、定义基本字符串常量:
define("DB_HOST", "localhost");
2、定义整型常量:
define("HTTP_STATUS_OK", 200);
3、定义大小写敏感常量(PHP 7.3.0起已废弃大小写不敏感选项,第三个参数case_insensitive必须省略或显式设为false):
define("API_VERSION", "v2", false);
三、在类中定义常量(类常量)
类常量属于类作用域,通过类名或self访问,PHP 8.1起支持public/private/protected可见性修饰符,且允许使用final防止子类覆盖。
1、定义传统类常量(PHP 5.0+):
class Config { const MODE = "development"; }
2、使用可见性修饰符(PHP 8.1+):
class Logger { public const LEVEL_INFO = 100; private const BUFFER_SIZE = 4096; }
3、定义final类常量(PHP 8.2+):
class Constants { final public const PI = 3.1415926; }
四、在接口中定义常量
接口中的常量默认为public且不可更改,PHP 8.0+起支持类型声明,其行为与类常量一致,但不能使用可见性修饰符(因强制public)。
1、定义接口常量:
interface CacheInterface { const DEFAULT_TTL = 3600; }
2、结合类型声明(PHP 8.0+):
interface MathConstants { const float GOLDEN_RATIO = 1.6180339887; }
五、在枚举(enum)中定义成员常量
PHP 8.1引入枚举类型,其case本身即为命名常量,可通过::访问,且支持方法、属性与类型约束;枚举case可携带标量值,亦可为无值case。
1、定义纯枚举(无值case):
enum Status { case Active; case Inactive; }
2、定义联合枚举(带标量值):
enum HttpStatus: int { case OK = 200; case NotFound = 404; case ServerError = 500; }
3、检查枚举case是否已定义(使用defined()):
var_dump(defined('Status::Active')); // bool(true)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











