PHP 中新增 const 常量与 define 的异同
该文章根据 CC-BY-4.0 协议发表,转载请遵循该协议。
本文地址:https://fenying.net/post/2015/01/05/difference-between-const-and-define-in-php/
文章目录
PHP 5.3 中新增了 const
关键词用于定义常量,本文介绍其与 define
直接的区别。
const
关键词用法如下:
1const XXX = 1;
这样的常量定义语法,虽然说他可以和define 一样用,但总归是不同的,不同之处如下:
1. namespace 绑定
define
定义的常量默认不受 namespace
约束,是全局常量,而 const
则受 namespace
严格约束,为局部常量,可以参考如下代码:
1<?php
2namespace A;
3
4define('dddd', 234); # define dddd 1
5const dddd = 4444; # define dddd 2
6
7namespace A\B;
8
9echo dddd, '<br>'; /* echo dddd.1*/
10const dddd = 123; # define dddd 3
11echo dddd, '<br>'; /* echo dddd.3*/
12
13namespace B;
14
15echo dddd, '<br>'; /* echo dddd.1*/
16echo \A\dddd, '<br>'; /* echo dddd.2*/
17echo \A\B\dddd, '<br>'; /* echo dddd.3*/
实际上也可用
define('A\B\C', 213);
定义特定命名空间下的常量。
2. const 只能接受字面量
define
可以接受任何结果为数值、字符串型的表达式,而 const
只能用字面量,参考如下:
1<?php
2define('ddd', strlen('ddd')); /*OK*/
3define('abc', 111 * 3333); /*OK*/
4const abc = 123; /*OK*/
5const abc = 'ffff'; /*OK*/
6const abc = strlen('ddd'); /* FORGET IT, NO WAY */
7const abc = 123 * 44433; /* FORGET IT, NO WAY */
3. const 是静态常量
const 生效在编译阶段,不能在执行过程中根据条件定义 const 常量,而 define 可以,因为后者是函数,参考如下:
1<?php
2
3if (1 < 5) {
4 define('ddd', 123);
5}
6
7if (5 > 3) {
8 const kkk = 321; /* NO WAY */
9}
4. define 允许大小写不敏感的常量名
1<?php
2
3define('ddd', 123, true);
4
5echo DdD;
6
7const kkk = 555;
8
9echo kKk; # WHAT IS kKk?
归纳了这几点,使用 const 时千万注意了,如果还有别的我会继续补充。
comments powered by Disqus