什么是常量?常量是一种简单的标识符,常量也可以理解为值不变的量(如圆周率),常量在定义的时候就需要赋值,一旦常量值被定义后,在脚本执行期间是不能改变的。PHP中的常量分为系统常量和自定义常量。
常量作用
常量主要功效是可以避免重复定义,篡改变量值。在我们进行团队开发时,或者代码量很大的时候,对于一些第一次定义后不改变的量,如果我们使用变量,在不知情的情况下,使用同一变量名时,变量值就会被替换掉,从而会引发服务器执行错误的任务。
此外,使用常量还能提高代码的可维护性。如果由于某些原因,常量的值需要变更时候,我们只需要修改一个地方。例如在做计算中,起初我们取圆周率为3.14,于是很多计算中我们都使用3.14进行计算,当要求计算精度提高,圆周率需要取3.142的时候,我们不得不修改所有使用3.14的代码,倘若代码量比较多时,不仅工作量大,还可能遗漏。
系统常量
PHP提前给大家提供的,拿来就可以直接使用
PHP_VERSION //PHP版本
PHP_OS //PHP的运行系统
PHP_INT_MAX //整型的最大值
PHP_INT_SIZE //整数integer值的字长
自定义常量
TIPS
- 常量名称不加$
- 常量名称最好大写,以字母或者下划线开
- 常量定义之后可以在任意位置使用,常量作用域是全局的
- 常量一经定义在脚本执行期间是不能改变的
- 常量的值可以是标量类型,也可以是数组
- 常量默认区分大小写比如, CONSTANT 和 Constant 代表了不同的值,如果设置为 TRUE,该常量则大小写不敏感。
define()
define (string $name, mixed $value, bool) //定义一个常量
name 常量名
value 常量的值
在PHP5中,value 必须是标量( integer、 float、string、boolean、NULL),在PHP7中还允许是个array的值
实例
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; //输出 "Hello world."
echo Constant; //输出 "Constant" 并导致 Notice
define("GREETING", "Hello you.", true);
echo GREETING; //输出 "Hello you."
echo Greeting; //输出 "Hello you."
define("USERNAME", "xuxiaoke");
define("AGE", 26);
define("MARRIED", false);
define("SALARY", 3680.666);
define("TEST_ARRAY", array("a", "b", "c"));
echo "用户名为:",USERNAME,"<br/>";
echo "用户年龄为:",AGE,"<br/>";
echo "是否结婚:",MARRIED,"<br/>";
echo "年收入为:",SALARY,"<br/>";
var_dump(TEST_ARRAY);
const
const 关键字定义常量
const NAME=值;
常量一经定义在脚本执行期间是不能改变的>
实例
const WEB_TITLE="许小珂的个人博客";
const WEB_BLOG_URL = "https://www.finetheme.com";
const WEB_ADMIN = "许小珂";
echo WEB_TITLE,"<br/>";
echo WEB_ADMIN,"<br/>";
//通过constant来获取常量的值
echo constant("WEB_BLOG_URL");
检测常量是否存在
defined(name) //检测常量名称是否存在,如果存在返回true,否则返回false
获取所有已定义的常量
get_defined_constants() //返回的是数组,得到所有已定义的常量,包含系统常量和自定义常量
const和define的区别
使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。
TIPS
- const用于类成员变量的定义,一经定义,不可修改
- define不可以用于类成员变量的定义,可用于全局常量
- const可在类中使用,define不能
- const不能再条件语句中定义常量
实例
<?php
if (...){
const FOO = 'BAR'; // 无效的invalid
}
if (...) {
define('FOO', 'BAR'); // 有效的valid
}
?>
const只能接受静态的标量,而define可以采用任何表达式
<?php
const BIT_5 = 1 << 5; // 无效的invalid
define('BIT_5', 1 << 5); // 有效的valid
?>
const定义的常量时大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。
<?php
define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR
?>
魔术常量
__LINE__ //得到当前的行号
__FILE__ //得到当前文件的完整绝对路径和文件名
__DIR__ //得到当前文件的完整绝对路径
__FUNCTION__ //得到当前函数的名称
__CLASS__ //得到当前函数的类名
__METHOD__ //得到当前类的方法名称
__TRAIT__ //得到当前TRAIT的名称
__NAMESPACE__ //得到当前命名空间的名称
发表评论