写点什么

【web 开发基础】php 开发基础快速入门 (4)-PHP 常量详解

作者:迷彩
  • 2022 年 9 月 29 日
    广东
  • 本文字数:2909 字

    阅读完需:约 10 分钟

前言

常量的介绍

在"常量"的广义概念是:'不变化的量'(例如:在计算机程序运行时,不会被程序修改的量;数学函数中的某一个量,例如每一个具体的圆的半径、直径数值;物理学中的靠近地面的重力加速度;真空中的光速数值;不同的微粒的各自的质量)换言之,常量,在计算机技术方面虽然是为了硬件、软件、编程语言服务,但是它并不是专门为硬件、软件、编程语言而引入的概念。常量可区分为不同的类型,如:25、0 为整型常量,6.8 为实型常量,'a'、'b'为字符常量。常量一般从其字面形式即可判断。这种常量称为字面常量或直接常量。对于'常量'的通俗比喻--"如同大山不被轻而易举地改变"(当然,地球上的重力加速度到海枯石烂也会改变;而人们使用的常量是时间不很漫长的那一段时期基本上不会改变的量。而真空状态中的光速是常量理论上不可改变,是常量)


在 PHP 中有常量和变量两个概念,常量是相对于变量来说的。常量一般用于一些数据计算中固定的数值, 例如数学的π= -3.141 592....可以定义为常量。常量是一个简单值的标识符,正如其名,在脚本执行期间一个常量一旦被定义, 就不能再改变或者取消定义。常量的作用域是全局的,可以在脚本的任何地方声明和访问到常量,这也是在应用上我们经常选择使用常量的主要原因。另外,虽然常量和变量都是 PHP 的存储单元,但常量声明的类型只能是标量数据( boolean、integer、 float 和 string )。其实对于整型这种简单的数据类型常量来说,要比声明变量效率高一点,也节约空间。如果是复杂数据类型,例如字符串,效率就差不多。另外,常量可以避免因为错误或失误赋值而带来的运行错误,所以如果有不需要在程序运行过程中改变的量,我们首选常量。总之,在 PHP 中常量非常多见,不仅可以自定义常量使用,更主要的是几乎在每个 PHP 扩展中都默认提供了大量可使用的常量,而且 PHP 也提供了一些比较实用的魔术常量。


常量的定义和基本使用

声明常量和声明变量的方式是不同的,在 PHP 中是通过 define()函数来定义常量.常量的命名与变量相似,也要遵循与变量相似,也要遵循 PHP 标识符的命名规则。另外,声明常量默认还跟变量一样大小写敏感,按照惯例常量名称总是大写的但是不要在常量前面加上“$” 符号

define0 函数的格式如下:

boolean define(string name,mixedvalue[,bool case insensitive]) ;
//常量定义函数
复制代码

此函数的第一个 参数为字符串类型的常量名,第二个参数为常量的值或是表达式,第三个参数是可选的。如果把第三个参数 case_ insensitive 设为 TRUE,则常数将会定义成不区分大小写。预设是区分大小写的。如果只想检查是否定义了某个常量,则用 defined()函数。

常量的声明与使用:

<?phpdefine("TEST_INT", 100); //声明一个名TEST_INT的常量 值为100//打印输出echo TEST_INT;echo '<br>';define("TEST_FLOAT", 88.88); //声明一个名TEST_FLOAT的常量 值为浮点数88.88//打印输出echo TEST_FLOAT;echo '<br>';
define("TEST_BOOL", true); //声明一个名TEST_BOOL的常量 值为true(布尔值)//打印输出echo TEST_BOOL;echo '<br>';
define("TEST_STRING", "李白"); //声明一个名TEST_STRING的常量 值为字符串:李白//打印输出echo TEST_STRING;echo '<br>';
define("TEST_STR", "李白", true); //声明一个名TEST_STRING的常量 值为字符串:李白 ,不区分大小//打印输出echo TEST_STR;echo '<br>';echo TEST_STR;echo '<br>判断常量是否被定义<br>';
//判断一个常量是否被定义if(defined('TEST_STR')){ echo TEST_STR;}
复制代码

执行结果如下:

使用一个没有声明的常量常量名称会被解析为一个普通字符串,会比直接使用字符串慢将近 8 倍左右,所以在声明字符串时一定要加上单引号或双引号


常量与变量的区别

  1. 常量前面没有美元符号 ($)

  2. 常量只能用 define()函数定义,而不能通过赋值语句定义

  3. 常量可以不用理会变量范围的规则而在任何地方定义和访问

  4. 常量一旦被定义就不能被重新定义或者取消定义,直到脚本运行结束自动释放。常量的值只能是标量( boolean、integer、 float 和 string 这 4 种类型之一)


系统中的 PHP 预定义的常量

在 PHP 中,除了可以自己定义常量,PHP 本身还预定义了一系列系统常量, 可以在程序中直接使用来完成一些特殊的功能。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才可使用,或者动态加载后,或者在编译 PHP 时已经包括进去了。这些分布在不同扩展模块中的预定义常量有多种不同的开头,决定了各种不同的类型。PHP 内置一些在系统中常见的预定义常量如下:

PHP_OS:

常量值:UNIX 或者 WINNT 等

作用:执行解析的操作系统名称

PHP_VERSION:

常量值:7.2.12 等等

作用:当前 PHP 的版本

TRUE:

常量值:TRUE

作用:代表布尔值,真

FALSE:

常量值:FALSE

作用:代表布尔值,假

NULL:

常量值:NULL

作用:代表空值

DIRECTORY_SEPARATOR:

常量值:/或者\

作用:根据操作系统决定目录分隔符

PATH_SEPARATOR:

常量值:;或:

作用:根据操作系统决定环境变量的目录列表分隔符

E_ERROR:

常量值:1

作用:错误,导致 PHP 脚本运行终止

E_WARNING:

常量值:2

作用:警告,会有提示,不会导致 PHP 脚本终止运行

E_PARSE:

常量值:4

作用:解析错误,由程序解析器报告

E_NOTICE:

常量值:8

作用:非关键的错误,比如:变量未初始化等

M_PI:

常量值:3.1415926535898

作用:数学中π的值

<?php echo PHP_VERSION;?>
复制代码

执行结果:


PHP 中除了预定义常量还有魔术常量,下面接着了解魔术常量具体内容


PHP 中的魔术常量

PHP 中还有 5 个常量会根据它们使用的位置改变而改变,这样的常量在 PHP 中被称为:魔术常量。比如:__LINE__的值就依赖于它在脚本中所处的行来决定.而且这些特殊的常量不区分大小写.具体如下:

__FILE__:

常量值:当前的文件名

作用:默认常量,是指 PHP 程序文件名及路径;在哪个文件中使用,就代表哪个文件名称

<?phpecho '该文件位于 " ' . __FILE__ . ' " ';?>
复制代码


__DIR__:

常量值:当前所在的目录

作用:文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0 中新增)

<?phpecho '该文件位于 " ' . __DIR__ . ' " ';?>
复制代码

__LINE__:

常量值:当前的行数

作用:默认常量,是指 PHP 程序的行数;在代码的哪行使用,就代表哪行的行号

<?phpecho '该文件位于 " ' . __FILE__ . ' " ';?>
复制代码

__CLASS__:

常量值:当前的类名

作用:类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。:在哪个类中使用就代表哪个类的类名


__TRAIT__:

常量值:Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

作用:Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。


__METHOD__:

常量值:当前对象的方法名

作用:类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。在对象中的哪个方法中使用就代表哪个方法名


__FUNCTION__:

常量值:当前的函数名

作用:在哪个函数中使用就代表哪个函数名

代码实践

预定义和魔术常量的基本用法如下:

<?phpecho "当前文件的路径:".__FILE__;echo "</br>当前的行数:".__LINE__;echo "</br>当前PHP的版本信息:".PHP_VERSION;echo "</br>当前的操作系统:".PHP_OS;?>
复制代码


执行结果如下:


发布于: 刚刚阅读数: 5
用户头像

迷彩

关注

我的工作是常年写bug|公众号:编程架构之美 2020.06.18 加入

修bug的菜鸟~公众号:“互联网有啥事”已改名为“编程架构之美”

评论

发布
暂无评论
【web 开发基础】php 开发基础快速入门 (4)-PHP常量详解_php_迷彩_InfoQ写作社区