1.常量是一个简单值的标识符,在脚本执行期间不可修改,全部大写命名是个好习惯。
2.语法
一般用define定义,defined判断是否存在
5.3以后可以用const定义(const一般用于类内部属性的定义)
常量只能包含标量数据(int,bool,string,float)
当无法确定常量名称时可用constant()获取
如:
<?php
class a
{
const b = "test";
}
$a = ‘b‘;
echo constant("a::".$a);
?>
注意:居然可以设定空字符串为常量(这是BUG吗)
注意:在添加命名空间后,define和const的访问形式将会不一样
如:
<?php
namespace sub;
define("ABC","DEF");
const DEF="abc";
class foo {
const BAR = ‘Hello World‘;
}
constant(‘ABC‘); // works
//constant(‘sub\ABC‘); // not works
//constant(‘DEF‘); // not works
constant(‘sub\DEF‘); // works
//constant(‘foo::BAR‘); // not works
constant(‘sub\foo::BAR‘); // works
?>
所以由此可证明:define出来的常量是全局的,而const出来的常量是局部的,这就是它们之间的区别。
get_defined_constants可获取所有常量组成的数组
3.魔术常量
大量魔术常量是随着扩展库而定义的,下面列举一些随代码位置改变而改变的常量:
__LINE__:文件中的当前行号
__FILE__:文件的完整路径(如果用在被包含的文件中,则显示被包含的文件名)
__DIR__:文件所在目录(如果用在被包含的文件中,则显示被包含的目录),等价于dirname(__FILE__),这两个都可以用于绝对路径的判断依据
__FUNCTION__:返回该函数的名称
__CLASS__:返回该类的名称
__TRAIT__:返回Trait的名称(Trait是新的一种继承类似类,目前感觉还没有什么大用处)
__METHOD:返回类的方法名(与__FUNCTION__的区别在于他的形式是类名::方法名)
__NAMESPACE__:返回当前命名空间的名称
扩展:get_class可以返回对象的类名