php
定义常量的方式有两种define
和const
,两者有什么区别?
const CONSTANCE = 'const';
define('CONSTANCE', 'const');
const
关键字从php 5.3以后可以在类定义之外定义常量
const
可以在类内部定义,而define
不行。const
定义的常量在当前的命名空间中,而define
要定义执行的命名空间,必须写出具体命名空间。
class Foo {
const BAR = 2;
}
class Foo2 {
define("BAR", 3); //无效的
}
//命名空间的示例
namespace A{
const A1 = 1; //处在命名空间A中
define('A2', 2); //全局可调用
define('A\A3', 3); //处在命名空间A中
}
namespace B{
use const \A\A1;
use const \A\A3;
echo A1;
echo A2; //全局调用
echo A3;
}
const
是在编译阶段定义常量,define
是在预处理阶段定义常量
const
在编译阶段就定义了常量,定义常量时必须处于最顶端的作用区域。
所以不能再if
等条件语句中定义。
define
定义常量,又叫宏定义,宏
可以描述为根据一系列预定义的规则替换一定的文本模式。define
可以在分支中存在。
理论上,使用const
处理速度比define
会快一点点。
const
只接受标量数据,(如integer, string, boolean和float等);define
可以接受任意表达式
define('BIT_5', 1<<5);
const BIT_5 = 1<<5; //5.6之后才有效
从php 5.6起,const
也可以接受数组和表达式define
可以接受resource
类型,const
不行
const
常量名只能是简单字符,define
可以是任意表达式
const STR = 'string';
$i = 1;
define("STR_" . $i, STR);
-
const
大小写敏感,define
可以通过第三个传参控制大小写敏感。
另外几个问题
-
const
和define
定义的常量数组是否能改变其中的元素? - 能否用
defined
来检查const
定义的常量?
define vs const
宏
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。