
2.2 PHP常量及预定义常量
PHP有时使用常量实现数据在内存中的存储,使用常量名实现内存数据的按名存取。常量用于存储不经常改变的数据信息。常量的值被定义后,在程序的整个执行期间内,这个值都有效,并且不可再次对该常量进行赋值。PHP常量分为自定义常量和预定义常量。
2.2.1 声明和使用常量
1.使用define()函数声明自定义常量
在PHP中自定义常量在使用前必须定义,使用define()函数来定义常量,函数的语法如下:

define()函数的参数说明如表2-1所示。
表2-1 define函数的参数说明

注:函数中使用“[]”括起来,表示该参数是“可选参数”(不是必须的)。
2.使用constant()函数获取常量的值
获取指定常量的值和直接使用常量名输出的效果是一样的。但函数可以动态地输出不同的常量,在使用上要灵活、方便得多。constant()函数的语法如下:

参数const_name为要获取常量的名称。如果成功则返回常量的值,失败则提示错误信息常量没有被定义。
3.使用defined()函数判断常量是否已经被定义
defined()函数的语法如下:

参数constant_name为要获取常量的名称,成功则返回true,否则返回false。
【例2-1】使用define()函数来定义名为MESSAGE的常量,使用constant()函数来获取该常量的值,最后再使用defined()函数来判断常量是否已经被定义。

运行结果如下:

注:常量定义时应注意以下几点。
1)常量必须使用define()函数定义,常量名前面不加前缀“$”符。
2)常量名由字母或者下划线开头,后面跟上任意数量的字母、数字或者下划线。
3)常量名可以全部大写、全部小写或者大小写混合,但是一般习惯是全部大写。
4)常量的作用域是全局的,不存在使用范围的问题,可以在程序任意位置进行定义和使用。
5)常量一旦被定义,其值不能在程序运行过程中修改,也不能被销毁。
2.2.2 预定义常量
内存中专门为常量的存储分配了一个空间:常量存储区。常量存储区是一块比较特殊的存储空间,位于该存储空间的常量是全局的,且在程序运行期间不能修改和销毁。PHP中提供了很多预定义常量,可以获取PHP中的信息,但不能任意更改这些常量的值。预定义常量的名称及其作用如表2-2所示。
表2-2 PHP中预定义常量

注:__FILE__和__LINE__中的“__”是两条下划线,而不是一条“_”。表中以E_开头的预定义常量,是PHP的错误调试部分。如需详细了解,请参考error_reporting()函数的使用。
【例2-2】下面使用预定义常量来输出PHP中的一些信息。

运行结果如下:
