php中的常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。常量默认为大小写敏感。通常常量标识符总是大写的。
可以用 define()
函数来定义常量。在 PHP 5.3.0 以后,可以使用 const
关键字在类定义的外部定义常量,先前版本const
关键字只能在类(class)中使用。一个常量一旦被定义,就不能再改变或者取消定义。
常量只能包含标量数据(boolean,integer,float 和 string)。 可以定义 resource 常量,但应尽量避免,因为会造成不可预料的结果。
可以简单的通过指定其名字来取得常量的值,与变量不同,不应该在常量前面加上 $ 符号。如果常量名是动态的,也可以用函数constant()
来获取常量的值。用get_defined_constants()
可以获得所有已定义的常量列表。
常量和变量有如下不同的常量规则:
- 常量前面没有美元符号($)
;
- 常量只能用define()
函数定义,而不能通过赋值语句;
- 常量可以不用理会变量的作用域而在任何地方定义和访问;
- 常量一旦定义就不能被重新定义或者取消定义;
- 常量的值只能是标量。
- 以字母或者下划线开始,后面跟着字母,数字,下划线。
- 常量的值不能有任何操作,不能包含任何变量等。
php的常量有几种类型:
普通常量就是使用define
来进行的常量设置。比如
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");
在5.3之后,普通常量也支持通过const来进行设置
<?php
const FOO = "something";
echo FOO;
类常量是使用const在类的内部进行设置。
这种常量可以使用类名,也可以使用实例化来获取。
<?php
class A
{
const con = 'Acon';
}
echo A::con;
$a = new A();
echo $a::con;
使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多,还有如下区别:
php的魔术常量实际上不是常量,而是一种预定义常量。
有8个魔术常量
常量 | 意义 |
---|---|
__LINE__ | 文件中的当前行号 |
__FILE__ | 文件的完整路径和文件名 |
__DIR__ | 文件所在的目录 |
__FUNCTION__ | 函数名字 |
__CLASS__ | 类名 |
__TRAIT__ | Trait的名字,Trait的概念是5.4之后才加上的,所以这个魔术常量也是5.4之后才有的。 |
__METHOD__ | 类的方法名 |
__NAMESPACE__ | 当前命名空间名称,命名空间是5.3之后加上的,所以这个魔术常量是5.3之后才有的。 |
在php的内核中有一些是预定义常量。
经常使用的一些预定义常量有:
常量 | 意义 |
---|---|
PHP_VERSION | PHP的版本 |
PHP_OS | 当前运行php的操作系统(win/linux) |
PHP_SAPI | 当前运行php的API环境(cli/cgi) |
PHP_EOL | 换行 |
DEFAULT_INCLUDE_PATH | 默认的include路径 |
PHP_EXTENSION_DIR | PHP扩展地址 |