define和const的区别-PHP常量
什么是常量?
这点官方手册上写的很清楚.
可以用 define() 函数来定义常量,在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量。一个常量一旦被定义,就不能再改变或者取消定义。
常量只能包含标量数据( boolean , integer , float 和 string )。可以定义 resource 常量,但应尽量避免,因为会造成不可预料的结果。
可以简单的通过指定其名字来取得常量的值,与变量不同,不应该在常量前面加上 $ 符号。如果常量名是动态的,也可以用函数 constant() 来获取常量的值。用 get_defined_constants() 可以获得所有已定义的常量列表。
常量和变量的区别
这点官方手册也同样提到了.
- 常量前面没有美元符号($);
- 常量只能用 define() 函数定义,而不能通过赋值语句;
- 常量可以不用理会变量的作用域而在任何地方定义和访问;
- 常量一旦定义就不能被重新定义或者取消定义;
- 常量的值只能是标量。
定义常量的方式
1 |
|
define 和 const 的区别
两者的根本区别在于const在编译期间定义常量,而define则是在执行期间。感觉某种程度上const有点类似Java中的final关键字。由于const运行在编译期间,所以就意味着:
const 关键字定义常量必须处于最顶端的作用区域
不能在函数内,循环内以及 if 语句之内用 const 来定义常量, define 可以
1 | if (...) { |
const 大小写敏感,define可以忽略大小写敏感
const
1 | const CONSTANT = "Hello world"; |
输出
1 | Hello world |
define
1 | define ( "CONSTANT" , "Hello world.", true ); |
输出
1 | Hello world. |
const 只能接受静态的标量,而 define 可以采用任何表达式
1 | const BIT_5 = 1 << 5; // [1] |
其中 [1] 在 PHP 5.6 之后的版本都可以正常使用,[2] 一直都是正确的用法
*const 采用普通的常量名称,*define可以采用表达式作为名称**
1 | const FOO = 'BAR'; |
*const 可以在当前命名空间定义常量,而*define则需要补全路径**
1 | namespace A\B\C; |
*const可以在类或者接口中使用,而*define不可以**
1 | class Foo { |
自PHP5.6之后 const 可以定义数组常量,而define在PHP7.0才可以
1 | const FOO = [1, 2, 3]; |