PHP 中 define() 和 const 定义常量时的区别
自 PHP 5.3.0 起,有两种方式定义常量,使用 const 关键字或者 define() 函数:
1
2
|
const FOO = 'BAR';
define('FOO', 'BAR');
|
这两种方式最根本的区别在于 const 在编译时定义,而 define 在运行时定义。
一、const 不能在条件语句中使用,使用 const 关键字定义常量必须处于最顶端的作用区域:
1
2
3
4
5
6
7
|
if (...) {
const FOO = 'BAR'; // 错误
}
// 但是
if (...) {
define('FOO', 'BAR'); // 正确
}
|
二、const 定义常量值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用,官网说明见这里;而 define 定义常量时可以使用表达式的值:
1
2
|
const BIT_5 = 1 << 5; // 错误
define('BIT_5', 1 << 5); // 正确
|
三、const 定义的常量名不能是表达式,而 define 可以,因此下面的代码是合法的:
1
2
3
|
for ($i = 0; $i < 32; ++$i) {
define('BIT_' . $i, 1 << $i);
}
|
四、const 定义的常量名大小写敏感,而 define 可以在定义常量时指定第三个参数为 true 定义一个大小写不敏感的常量:
1
2
3
|
define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR
|
说明:有人说在 PHP 5.3 之前的版本里面,const 语句只能用在类定义里而不能再全局定义域使用,这点笔者没有去考证,都啥年代了,还用 PHP 5.2 ?另外请注意, PHP 官网上对 const 的说明是放在类与对象里面讲的,也能表明 const 最初设计是用来定义类里面的常量的。