跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

PHP常量怎么定义_PHP define const区别介绍【详解】

该用 const 还是 define() 取决于场景:全局作用域推荐 const;类中必须用 const;动态定义、大小写不敏感、表达式命名、运行时值需用 define();const 要求编译期可求值,性能更优。 define() 和 const 哪个该用?看场景选 全局作用域下两者都能用,但
const
更推荐;类中必须用
const
,
define()
根本不支持类内定义。 需要在
if
或循环里动态决定是否定义常量?只能用
define()
——
const
在条件块里直接报错:
Parse error: syntax error, unexpected 'const'
要定义大小写不敏感的常量(比如兼容旧系统)?只有
define('FOO', 'bar', true)
支持,
const
永远大小写敏感 命名想用表达式拼接(如
BIT_5
)?
define('BIT_' . 5, 32)
可行;
const
的名字必须是纯标识符,不能含点号、运算或变量 const 声明值有哪些硬限制?
const
的右边必须是「编译期可求值」的常量表达式,不能依赖运行时函数或变量。
const NOW = time();
❌ 报错:函数调用不允许
const MAX = 100 * 2;
✅ 允许:纯数字运算
const HOST = $_SERVER['HTTP_HOST'];
❌ 不行:超全局变量不是常量表达式
const CONFIG = ['db' => 'mysql'];
✅ PHP 5.6+ 支持数组字面量,但 PHP 5.5 及更早会报错 define() 的灵活性背后藏着什么代价?
define()
是函数调用,每次执行都有函数开销;
const
是语言结构,解析阶段就固化,性能略优,也更容易被 OPcache 优化。 大量定义(比如配置文件里上百个常量)?优先用
const
,尤其在 Composer 自动加载的类文件中 需要运行时根据环境开关常量(如调试模式)?
define()
是唯一选择,但注意它不支持重复定义——二次调用会触发
Notice: Constant XXX already defined
想检查常量是否存在再定义?得先用
defined('XXX')
判断,
const
没有等价的语法糖 类常量怎么访问?self:: 和 static:: 有区别吗? 类中只能用
const
,访问时用
ClassName::CONST_NAME
或
self::CONST_NAME
。但要注意后期静态绑定: PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 立即学习 “ PHP免费学习笔记(深入) ”;
self::
绑定声明时的类,适合固定值逻辑(如状态码)
static::
绑定运行时实际调用的类,适合被子类覆盖的场景(需配合
final
控制) 类常量默认 public,不可用
private const
(PHP 7.1+ 才支持访问控制修饰符) 别忘了魔术常量如
__CLASS__
和
__METHOD__
是只读的,它们不是你定义的,但随时能拿过来用。

相关文章