概念
常量我们可以理解为值不变的量。常量只要被定义了,在程序脚本的其他任何地方都不能改变。
因为常量被定义后不能被修改,所以即使重定义常量的值,常量的值也是第一次定义常量时的值
常量不管在哪里被定义,都具有超全局作用域
常量的定义
常量可以通过define()函数和const关键字两种形式定义
个人建议,类常量以外的常量定义尽可能使用define
define ( string $name , mixed $value [, bool $case_insensitive = false ] )
case_insensitive可选。
默认是false,大小写敏感的。如果设置为TRUE
,该常量则大小写不敏感。
const NAME = VALUE
define (ABC, "") ; //name可以不加引号,但是不建议这样写
define ("ABC", "1111") ; //define定义常量时推荐常量名带引号
const DEF = ""; //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 = ;
define("C2", );
//{}语句块内不能使用const,可以使用define
if (true) {
const C3 = ; //错误
define("C4", );
}
for ($i=; $i<;$i++) {
const C5= ; //错误
define("C6", );
} function test () {
const C7= ; //错误
define("C8", );
} //define可以动态使用常量名,const不可以
//define常量值可以采用任何表达式,而const只能接受静态的标量
const FOO = 'BAR';
for ($i = ; $i < ; ++$i) {
define('BIT_' . $i, << $i);
define('HOST_NAME' . $i, 'HOST' .$i);
}
//const可以定义类常量
class Collect_notification {
const C9= ;
define("C10", ); //错误。define不能定义类常量 function main(){
const C11= ; //错误。{}语句块内不能使用const
define("C12", );
}
}
常量的使用
有两种形式
1,直接使用名字
2,使用constant()函数:constant(“常量名”)函数可以动态地输出不同的常量,在使用上要灵活方便很多
const FOO = 'BAR';
for ($i = ; $i < ; ++$i) {
define('HOST_NAME' . $i, 'HOST' .$i);
}
echo HOST_NAME0; //直接使用常量名
echo HOST_NAME1;
for ($i = ; $i < ; ++$i) {
echo constant('HOST_NAME'.$i); //constant()函数动态使用常量
}
常量与变量的区别
定义形式不同 (常量使用define或者const定义); 使用形式不同(常量不需要 $ 符号); 可变程度不同(常量的值不可改变或者销毁); 作用范围不同(常量具有超全局作用域(函数内外都可直接使用)); 可用类型不同(常量只能存储标量类型:int,float,string,bool);