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