Definition

常量

常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。常量默认为大小写敏感。传统上常量标识符总是大写的。

常量的定义

常量呢,其实就是变量的反义词,你也可以叫它“不变量”,我们一般都会用常量来作为数据计算中固定的数值。比如:地球重力 G=9.80665,框架的根目录、程序的版本号等都是一个常量。在 PHP 中,你可以在任意的地方定义一个常量。和变量的定义方法不同的是,定义常量你需要用到 define() 内置函数,它的用法如下:


bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
        

还记得上节课讲过的“伪类型”变量吗?以上代码说明,函数 define 一共需要三个参数,前两个必传,后一个可以省略。他们分别是:常量名称、常量的值和是否大小写敏感(默认为不敏感)。所以,我们可以参考以下定义常量的方式来定义常量:


<?php

// 合法的常量名
define("WOWPHP",     "something");
define("WOWPHP2",    "something else");
define("WOWPHP_BAR", "something more");

// 非法的常量名
define("2WOWPHP",    "something");

// 下面的定义是合法的,但应该避免这样做:(自定义常量不要以__开头)
// 也许将来有一天PHP会定义一个__WOWPHP__的魔术常量
// 这样就会与你的代码相冲突
define("__WOWPHP__", "something");
        

可以看出,常量的命名规则和变量的命名规则是一样的。按照惯例,常量的名称均为大写,这是 PSR 的代码规范,还请大家遵循。

常量的使用

定义好了常量如何使用呢?和变量的用法也有一点儿不同。由于常量的声明没有用到 $ 符号,所以你可以直接使用常量的名字即可,前后不必加任何修饰符(包括引号)。像这样:


<?php
// 输出刚才定义好的 WOWPHP 常量
echo WOWPHP;
// 错误的使用方式
echo 'The value is WOWPHP';
// 正确的使用方式
echo 'The value is' . WOWPHP;
        

如果你不确定某个常量有没有被定义,可以使用 defined 函数来判断,像这样:


<?php
// 注意这里的判断中需要加引号哟
if (defined('WOWPHP')) {
	echo WOWPHP;
}
        

常量的特性

如果有不需要再程序运行过程中需要改变的值,试试常量吧。除了上文说到的,常量还有以下特点:

  • 常量的作用域是全局的,可以在脚本的任何一个地方使用。
  • 虽然常量和变量都是 PHP 的数据储存单元,但是常量的解析速度要比变量快一些。
  • 常量可以避免因为赋值错误或失误带来的运行错误。

如果在程序中使用了一个没有声明的常量,那么你使用的这个常量名称将会被 PHP 解析为一个普通字符串,而且会比直接使用字符串慢 8 倍左右,所以在声明字符串时一定要使用单引号或双引号;在使用常量时最好先判断该常量存不存在。

常量与变量的区别

  1. 常量面前没有 $ 符号。
  2. 常量只能通过 define 函数来定义,不可直接赋值。
  3. 常量可以不必理会变量的生效范围规则,而可以在任何地方定义和使用。
  4. 常量一旦定义就不可再次定义或删除,脚本运行结束后会自动释放。
  5. 常量只能是标量(boolean、integer、float、和string)这四种类型之一。

注意:在 PHP7 之后,常量已经可以支持 array 类型的值来声明了。

常见的系统内置常量

系统为我们准备了一些内置的常量。这些常量都是规定好的。如下:

常量名 说明
LINE 当前所在的行
FILE 当前文件在服务器的路径
FUNCTIOIN 当前函数名
CLASS 当前类名
METHOD 当前成员方法名
PHP_OS PHP运行的操作系统
PHP_VERSION 当前PHP的版本
TRAIT Trait 的名字,php5.4新加
DIR 文件所在的目录
NAMESPACE 当前命名空间的名称(区分大小写)

请登录

WOWPHP 账号登录 GitHub 账号登录

还没有账号?现在去注册一个~