PHP源码解读const与define

PHP中,define和const都可以定义一个常量,但是两者在实现和用法上还是有一些区别的:

可以在PHP的const实现上,有这么一行声明:

T_CONSTT_STRING=static_scalar{zend_do_declare_constant($2,$4TSRMLS_CC);}

1、可以看到,使用const的时候,还会把当前名字空间转换成小写,然后添加到常量名的上面上。因此const是具有名字空间归属的。

Define的实现如下:

1、没有加上名字空间,所以是不具备有名字空间的。

?PHP

Classtest{

Constt=;

}

Echotest::t;//输出

?

这样子,const就可以定义类常量了。但是如果使用define,从源码中可以看到,他是禁止常量名中含有::这个的,因此他是不能够定义类常量的。而如果将其放在类中,则是会提示语法错误的:

?PHP

Classtest{

Define(‘t’,’’);//语法错误

}

?

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

const是编译时转成成常量的,而define是在运行时转换的。

define是定义在一个全局范围内的,也就是说,他不可以用在类中或者是名字空间中。但是const便可以。

const不可以用在if语句中,define可以。

define定义的常量的名和值都可以使用表达式,但是const不可以。









































北京哪家医院看白癜风好
北京治白癜风比较好的医院



转载请注明:http://www.guyukameng.com/jbxx/jbxx/2968.html