常量是一个简单的标识符。在脚本执行期间该值不能改变(除了所谓的魔术常量,他们其实不是常量)。常量默认大小写敏感。通常常量标识符总是大写的。
常量只能包含标量数据(boolean、integer、float和string)。可以定义resource常量,但应尽量避免,因为会造成不可预料的结果。
一、版本差异
define()
使用在
php4 版本和 php5 版本中
const
使用在
php5.3.0 及以上的版本
二、定义位置的区别
函数define()
可以在函数内、循环内、条件语句内等能够被调用的任何地方定义常量
<?php
if (...){
const FOO = 'BAR'; // 无效的invalid
}
if (...) {
define('FOO', 'BAR'); // 有效的valid
}
?>
const
用于类成员变量的定义,一经定义,不可修改,且定义常量必须处于最顶端的作用区域,因此const
不能在函数内、循环内、条件语句中定义常量
<?php
const DEMO = 'DEMO';
class Person{
const MAN = '男';
const WOMAN = '女';
}
interface USB{
const VERSION_2 = '2.0';
const VERSION_3 = '3.0';
}
?>
三、对值的表达式支持的差异
const
采用普通的常量名称,只能接受静态的标量;函数define()
可以采用表达式作为名称
<?php
const FOO = 'BAR';
for ($i = 0; $i < 32; ++$i) {
define('BIT_' . $i, 1 << $i);
}
?>
四、对字符大小写敏感的支持差异
define()
可以接收第3个参数,如果该参数为true
,则表示常量名的大小写不敏感;
const
关键字定义常量却没有提供类似的功能
<?php
//define()的第3个参数为true时,表示大小写不敏感
define('SITE_NAME', 'CodePlayer', true);
echo SITE_NAME; //输出:CodePlayer
echo site_name; //输出:CodePlayer
echo SiTe_NamE; //输出:CodePlayer
const DOMAIN_NAME = '365mini.com';
echo DOMAIN_NAME; //输出:365mini.com
echo domain_name; //PHP提示常量未定义
echo DomaIN_nAMe; //PHP提示常量未定义
?>