在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’);//语法错误

}

?>

 

根据上面两份源码,可以得出两者的区别主要是:

  1. const是编译时转成成常量的,而define是在运行时转换的。
  2. define是定义在一个全局范围内的,也就是说,他不可以用在类中或者是名字空间中。但是const便可以。
  3. const不可以用在if语句中,define可以。
  4. define定义的常量的名和值都可以使用表达式,但是const不可以。
PHP源码解读:const与define的区别
标签: