PHP常量总结
概念
常量我们可以理解为值不变的量。常量只要被定义了,在程序脚本的其他任何地方都不能改变。
因为常量被定义后不能被修改,所以即使重定义常量的值,常量的值也是第一次定义常量时的值
常量不管在哪里被定义,都具有超全局作用域
常量的定义
常量可以通过define()函数和const关键字两种形式定义
个人建议,类常量以外的常量定义尽可能使用define
define ( string $name , mixed $value [, bool $case_insensitive = false ] )
case_insensitive可选。
默认是false,大小写敏感的。如果设置为TRUE
,该常量则大小写不敏感。
const NAME = VALUE
define (ABC, "1111") ; //name可以不加引号,但是不建议这样写
define ("ABC", "1111") ; //define定义常量时推荐常量名带引号
const DEF = "2222"; //const定义常量时,常量名不能带引号
define()函数和const的区别
1.在php5.3.0以前,const只用于在类内部定义类常量,而无法在类外部定义常量。
在php5.3.0以后,const可以在类外部定义常量,但不能在函数,条件语句,循环语句等的{}语句块中定义常量
2.使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。
3.define可以在在函数,条件语句,循环语句等的{}语句块中定义常量,const不可以
4.const可以定义类常量,而define不可以
5.define可以动态设置常量名,const不可以
6.define常量值可以采用任何表达式,而const只能接受静态的标量
7.const定义的常量大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。
<?php $hostname = php_uname('n'); //类外正常定义 const C1 = 1; define("C2", 2); //{}语句块内不能使用const,可以使用define if (true) { const C3 = 1; //错误 define("C4", 2); } for ($i=0; $i<2;$i++) { const C5= 1; //错误 define("C6", 2); } function test () { const C7= 1; //错误 define("C8", 2); } //define可以动态使用常量名,const不可以 //define常量值可以采用任何表达式,而const只能接受静态的标量 const FOO = 'BAR'; for ($i = 0; $i < 32; ++$i) { define('BIT_' . $i, 1 << $i); define('HOST_NAME' . $i, 'HOST' .$i); } //const可以定义类常量 class Collect_notification { const C9= 1; define("C10", 2); //错误。define不能定义类常量 function main(){ const C11= 1; //错误。{}语句块内不能使用const define("C12", 2); } }
常量的使用
有两种形式
1,直接使用名字
2,使用constant()函数:constant(“常量名”)函数可以动态地输出不同的常量,在使用上要灵活方便很多
const FOO = 'BAR'; for ($i = 0; $i < 2; ++$i) { define('HOST_NAME' . $i, 'HOST' .$i); } echo HOST_NAME0; //直接使用常量名 echo HOST_NAME1; for ($i = 0; $i < 2; ++$i) { echo constant('HOST_NAME'.$i); //constant()函数动态使用常量
}
常量与变量的区别
定义形式不同 (常量使用define或者const定义); 使用形式不同(常量不需要 $ 符号); 可变程度不同(常量的值不可改变或者销毁); 作用范围不同(常量具有超全局作用域(函数内外都可直接使用)); 可用类型不同(常量只能存储标量类型:int,float,string,bool);