在php中,define和const都可以定义一个常量,但是两者在实现和用法上还是有一些区别的:
可以在php的const实现上,有这么一行声明:
T_CONST T_STRING '=' static_scalar {zend_do_declare_constant(&$2, &$4 TSRMLS_CC); }
1、 可以看到,使用const的时候,还会把当前名字空间转换成小写,然后添加到常量名的上面上。因此const是具有名字空间归属的。
Define的实现如下:
1、没有加上名字空间,所以是不具备有名字空间的。
<?php
Class test{
Const t=123;
}
Echo test::t;//输出123
?>
这样子,const就可以定义类常量了。但是如果使用define,从源码中可以看到,他是禁止常量名中含有::这个的,因此他是不能够定义类常量的。而如果将其放在类中,则是会提示语法错误的:
<?php
Class test{
Define(‘t’,’123’);//语法错误
}
?>
根据上面两份源码,可以得出两者的区别主要是:
- const是编译时转成成常量的,而define是在运行时转换的。
- define是定义在一个全局范围内的,也就是说,他不可以用在类中或者是名字空间中。但是const便可以。
- const不可以用在if语句中,define可以。
- define定义的常量的名和值都可以使用表达式,但是const不可以。
相关博文
PHP源码解读:const与define的区别