php中 const 与define()的区别 ,选择
来自: http://stackoverflow.com/questions/2447791/define-vs-const
相同点: 两者都可以定义常量
const FOO = 'BAR'; defind('FOO','BAR');
const 的劣势之处:
1.const 必须被声明在top-level-scope中(顶级域)..
例如:
if(condition) { const FOO ='BAR'; //未定义 } //但是 if(condition) { defind('FOO','BAR'); //定义 }
一个常用的检测常量是否定义的方式:
if (!defined('FOO')) { define('FOO', 'BAR'); }
2.const 接受一个静态的标量类型(number,string,true.false,null,__FILE__,......),反之,defind()接受任何表达式。
但是,自PHP 5.6以后常量表达式也被允许在const中使用:
const BIT_5 = 1 << 5; // PHP 5.6之后 valid ,之前 invalid define('BIT_5', 1 << 5); // always valid
3.const 接受一个plain(?不知道翻译成啥,就是常量名称固定的意思)常量名,然而,defind()接受任何表达式作为常量名
for ($i = 0; $i < 32; ++$i) { define('BIT_' . $i, 1 << $i); }
4.const 定义的常量名是区分大小写的,define()允许你不区分大小写,只要将第三个参数传递true即可..
define('FOO','BAR',true);
echo FOO; //BAR
echo foo; //BAR
echo Foo; //BAR
以上就是const不好的一面,现在让我们看看除非发生以上的情况,我个人推荐使用const的理由.
1.const 易读,是一个语言结构,不是一个方法,也可以在类中使用定义常量
2.const 可以在当前命名空间定义常量,但是define()不得不传递完整的命名空间名称。(一个可以是相对的,一个必须是绝对的)
namespace A\B\C; // To define the constant A\B\C\FOO: const FOO = 'BAR'; define('A\B\C\FOO', 'BAR');
3.const 自PHP 5.6定义常量值可以使用数组,然而define()不支持数组,但是在PHP 7 将支持这一个特性.
const FOO = [1, 2, 3]; // valid in PHP 5.6 define('FOO', [1, 2, 3]); // invalid in PHP 5.6, valid in PHP 7.0
4.const 是语言结构,被定义在编译时,define()定义在运行时,const 比defind()快
5. 最后一点,const可以在类中定义常量,而 define()不可以.
class Foo { const BAR = 2; // valid } // but class Baz { define('QUX', 2); // invalid }
摘要
除非你要使用表达式或在条件判断语句中定义常量,那么使用 const 是你 居家旅行,杀人灭口必备之良药。