首页 > PHP 阅读:16

PHP define():定义常量

常量是指在脚本执行期间不能改变值的量。PHP 语言中常量大小写是敏感的,习惯上常量的命名总是大写的这一点请在使用时注意。

常量的声明(定义)

合法的常量名以字母或下划线开始,后面可跟任何字母、数字或下划线。

可以使用 define() 来定义常量,在 PHP 5.3.0 以后也可使用const关键词在类定义之外定义常量。常量只能是标量数据(boolean、integer、float、string),也可以定义资源类型(resource)常量,但是应该尽量避免,因为这会造成不可预料的结果。

常量命名示例如下:
<?php
//合法的常量名
define("FOO",     "something");  //定义一个名为FOO的常量
define("FOO2",    "something else");
define("FOO_BAR", "something more");
//非法的常量名
define("2FOO",    "something");
const A = 'AAA';  //使用const 定义一个常量, 与define定义效果一样
//下面的定义是合法的, 但应该避免这样做:(自定义常量不要以__开头)
//也许将来有一天PHP会定义一个__FOO__的魔术常量
//这样就会与你的代码相冲突
define("__FOO__", "something");
?>
常量的作用域是全局的,即在脚本的任何地方都可以使用已经定义的常量。

常量和变量有如下不同:
  • 常量前面没有美元符号($)。
  • 常量只能用 define() 和 const 定义。
  • 常量的作用域是全局的。
  • 常量一旦被定义就不能被重新定义或者取消定义。
  • 常量的值一般是标量。

预定义常量

PHP 中有很多预定义常量,也称作魔术常量,其中很多都是由不同的扩展库定义的,只有在加载了这些库时才会出现。几个常见的 PHP 魔术常量如表所示。

PHP 中常见的魔术常量
名称 说明
_LINE_ 文件中的当前行号
_FILE_ 文件的完整路径和文件名。如果用在被包含文件中,就返回被包含的文件名。自 PHP 4.0.2 起,_FILE_ 总是包含一个绝对路径(如果是符号连接,就是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径
_DIR_ 文件所在的目录。如果用在被包括文件中,就返回被包括的文件所在的目录。它等价于 dirname(_FILE_)。除非是根目录,否则目录中不包括末尾的斜杠(PHP 5.3.0 中新增)
_FUNCTION_ 函数名称(PHP 4.3.0 新增)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母
_CLASS_ 类的名称(PHP 4.3.0 新增)自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母。类名包括其被声明的作用区域(例如 Foo\Bar)。注意,自 PHP 5.4 起,_CLASS_ 对 trait 也起作用。当用在 trait 方法中时,_CLASS_ 是调用 trait 方法的类的名字
_TRAIT_ trait 的名字(PHP 5.4.0 新增)。自 PHP 5.4起,此常量返回 trait 被定义时的名字(区分大小写)。trait 名包括其被声明的作用区域(例如 Foo\Bar)
_METHOD_ 类的方法名(PHP 5.0.0 新增)。返回该方法被定义时的名字(区分大小写)
_NAMESPACE_ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)

在PHP 7中新增了以下常量:
PHP_INT_MIN
PREG_JIT_STACKLIMIT_ERROR
ZLIB_NO_FLUSH
ZLIB_PARTIAL_FLUSH
ZLIB_SYNC_FLUSH
ZLIB_FULL_FLUSH
ZLIB_BLOCK
ZLIB_FINISH
打印以上常量:
echo PHP_INT_MIN;echo "<br/>";
echo ZLIB_NO_FLUSH;echo "<br/>";
echo ZLIB_PARTIAL_FLUSH;echo "<br/>";
echo ZLIB_SYNC_FLUSH;echo "<br/>";
echo ZLIB_FULL_FLUSH;echo "<br/>";
echo ZLIB_FINISH;echo "<br/>";
echo ZLIB_BLOCK;echo "<br/>";
echo PREG_JIT_STACKLIMIT_ERROR;echo "<br/>";
输出结果是:
-9223372036854775808
0
1
2
3
5
4
6