3.1 常量
PHP有时使用常量实现数据在内存中的存储,使用常量名实现内存数据的按名存取。常量是指在程序运行过程中始终保持不变的量。常量一旦被定义,常量的值以及常量的数据类型将不再发生变化。PHP常量分为自定义常量和预定义常量。
3.1.1 自定义常量
自定义常量在使用前必须定义,PHP 的 define()函数专门用于定义自定义常量,define()函数的语法格式为:define(name,value[, boolean case_insensitive])。
函数功能:定义一个名字为 name,值为 value 的常量。case_insensitive 参数的默认值为FALSE,表示常量名name大小写敏感(区分大小写);case_insensitive参数值如果为TRUE,表示常量名name大小写不敏感(不区分大小写)。
函数说明:常量名name为字符串类型数据,常量值value必须是标量数据类型数据。
函数的语法格式中某个参数使用“[ ]”括起来,表示该参数是“可选参数”(不是必需的)。函数中可选参数都会有一个默认值,在函数调用时,如果不给可选参数传递值,那么默认值将赋给可选参数。如define()函数中,参数case_insensitive 是一个可选参数。
例如,程序define.php如下。
<?php
//定义DATABASE常量,此时DATABASE常量名大小写敏感
define("DATABASE","student");
//定义USER_NAME常量,此时USER_NAME大小写敏感
define("USER_NAME","root",FALSE);
//定义PASSWORD常量,此时PASSWORD大小写不敏感
define("PASSWORD","root",TRUE);
echo DATABASE; //输出:student
echo "<br/>";
echo USER_NAME; //输出:root
echo "<br/>";
echo password; //输出:root
?>
常量的定义及使用注意如下几点。
(1)常量必须使用define()函数定义,常量名前面不加前缀“$”符号。
(2)常量名由字母或者下画线开头,后面跟上任意数量的字母、数字或者下画线。
(3)常量名可以是全部大写、全部小写或者大小写混合,但一般习惯是全部大写。
(4)常量的作用域是全局的,不存在使用范围的问题,可以在程序任意位置进行定义和使用常量。
(5)常量一旦被定义,其值不能在程序运行过程中修改,也不能被销毁。例如,程序defineError.php如下,该程序的运行结果如图3-1所示。
<?php
define("DATABASE","student");
//重新定义DATABASE常量,此时将出现Notice信息
define("DATABASE","root",FALSE);
echo DATABASE; //输出:student
?>
由于程序defineError.php试图修改已定义常量DATABASE的值,程序产生Notice信息。从程序的运行结果可以看出,PHP产生Notice信息后,并不会影响程序的继续运行。
3.1.2 常量的内存分配
内存中专门为常量的存储分配了一个空间:常量存储区。常量存储区是一块比较特殊的存储空间,位于该存储空间的常量是全局的,且在程序运行期间不能修改和销毁。程序 define.php 运行过程中的内存分配图如图3-2所示。
3.1.3 预定义常量
PHP预定义了许多常量,这些常量无需使用define()函数定义,可直接在程序中使用。下面列举了一些常用的PHP预定义常量。
(1)__FILE__(FILE前后是两个下画线):当前正在处理的脚本文件名,若使用在一个被引用的文件中(include或require),那么它的值就是被引用的文件,而不是引用它的那个文件。
(2)__LINE__(LINE前后是两个下画线):正在处理的脚本文件的当前行数。
(3)PHP_VERSION:当前 PHP预处理器的版本,如5.3.0。
(4)PHP_OS:PHP所在的操作系统的类型,如Linux。
(5)TRUE:表示逻辑真。FALSE:表示逻辑假。NULL:表示没有值或值不确定。
(6)DIRECTORY_SEPARATOR:表示目录分隔符,UNIX或Linux操作系统环境时的值为“/”, Windows操作系统环境时的值为“\”。例如,程序preDefined.php如下。
<?php
echo __FILE__; //输出:C:\wamp\www\3\preDefined.php
echo "<br/>";
echo __LINE__; //输出:4
echo "<br/>";
echo PHP_VERSION; //输出:5.3.0
echo "<br/>";
echo PHP_OS; //输出:WINNT
echo "<br/>";
echo DIRECTORY_SEPARATOR; //输出:\
?>
共有条评论 网友评论