在 PHP 中,const
和 define
都可以用来定义常量。但二者之间有什么区别呢?
const 和 define 的区别
const 是在编译阶段定义的,define 是在运行时定义的。 因此,const 不可以有条件的定义,但是 define 可以。
1
2
3
4
5
6
7if (...) {
const FOO = 'BAR'; //非法的
}
//然而
if (...) {
define('FOO', 'BAR');//合法的
}const 只能接受静态标量(数字,字符串或者像 true、false、null、__FILE__等其他常量),而 define 接受任何表达式。不过从 PHP 5.6 开始,const 也开始支持表达式。
const 采用普通的常量名称,而 define 接受任何表达式作为名称。他可以做这样用:
1
2
3for ($i = 0; $i < 32; ++$i) {
define('BIT_' . $i, 1 << $i);
}const 的名称是大小写敏感的,但是 define 可以通过传递第三个参数为 true 来定义不区分名称大小写的常量。
1
2
3define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR
为什么我更赞成使用 const
const 可读性更好。const 是一种语言结构而不是函数,而且能够在类中进行定义。
const 作为一种语言结构,可以通过自动化工具进行静态分析。
const 在当前命名空间中定义常量,而 define 必须传进去整个命名空间名。
1
2
3
4namespace A\B\C;
// 比如要设置 A\B\C\FOO:
const FOO = 'BAR';
define('A\B\C\FOO', 'BAR');const 从 PHP 5.6 开始支持被定义为数组,但是 define 还不支持。不过从 PHP 7 开始,两者都支持定义为数组了。
最后,请记住 const 可以在类和接口中定义类常量或者接口常量,但是 define 不能这样做 。
1 | class Foo { |
总结
除非你需要根据条件和表达式来定义常量,否则使用 const 而不是 define - 只是为了便于阅读!
翻译自 define() vs const,版权归原作者所有。