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

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

前言

常量的介绍

在"常量"的广义概念是:'不变化的量'(例如:在计算机程序运行时,不会被程序修改的量;数学函数中的某一个量,例如每一个具体的圆的半径、直径数值;物理学中的靠近地面的重力加速度;真空中的光速数值;不同的微粒的各自的质量)换言之,常量,在计算机技术方面虽然是为了硬件、软件、编程语言服务,但是它并不是专门为硬件、软件、编程语言而引入的概念。常量可区分为不同的类型,如: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//打印输出echoTEST_INT;
echo'<br>';
define("TEST_FLOAT", 88.88); //声明一个名TEST_FLOAT的常量 值为浮点数88.88//打印输出echoTEST_FLOAT;
echo'<br>';
define("TEST_BOOL", true); //声明一个名TEST_BOOL的常量 值为true(布尔值)//打印输出echoTEST_BOOL;
echo'<br>';
define("TEST_STRING", "李白"); //声明一个名TEST_STRING的常量 值为字符串:李白//打印输出echoTEST_STRING;
echo'<br>';
define("TEST_STR", "李白", true); //声明一个名TEST_STRING的常量 值为字符串:李白 ,不区分大小//打印输出echoTEST_STR;
echo'<br>';
echoTEST_STR;
echo'<br>判断常量是否被定义<br>';
//判断一个常量是否被定义if(defined('TEST_STR')){
echoTEST_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

作用:数学中π的值

<?phpechoPHP_VERSION;
?>

执行结果:

网络异常,图片无法展示
|

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

PHP中的魔术常量

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

__FILE__:

常量值:当前的文件名

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

<?phpecho'该文件位于: " ' . __FILE__ . ' " ';
?>

__DIR__:

常量值:当前所在的目录

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

<?phpecho'该文件位于: " ' . __DIR__ . ' " ';
?>

__LINE__:

常量值:当前的行数

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

<?phpecho'这是第 " ' . __LINE__ . ' " 行';
?>

__CLASS__:

常量值:当前的类名

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

<?phpclasstestClazz {
functionout() {
echo'类名为:'  . __CLASS__ . "<br>";
echo'对象的方法名为:' . __METHOD__ ;
    }
}
$test=newtestClazz();
$test->out();
?>

结果:

类名为:testClazz

对象的方法名为:testClazz::out

__TRAIT__:

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

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

<?phpclassParentClazz {
publicfunctiontest() {
echo'test'; 
  }
}
traittestTrait {
publicfunctiontest() {
parent::test();
echo'Trait';
  }
}
classChildextendsParentClazz {
usetestTrait;
}
$obj=newChild();
$obj->test();
?>

__METHOD__:

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

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

<?phpfunctiontestMethod(){
echo'方法名为:' . __METHOD__ ;
}
testMethod();
?>

__FUNCTION__:

常量值:当前的函数名

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

<?phpfunctiontestphp(){
echo'函数名为:' . __FUNCTION__ ;
}
testphp();
?>

__NAMESPACE__:

常量值:当前命名空间的名称(区分大小写)

作用:当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

<?php
namespace MCProject;
echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MCProject"
?>

注:魔术变量两边是双下划线,也是是说是两个下划线连在一起:"__",PHP中还有魔术方法虽然只有左边有下划线,但同样是双下划线

代码实践

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

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

执行结果如下:

网络异常,图片无法展示
|

目录
相关文章
|
5天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
7天前
|
PHP 开发者
深入浅出PHP:构建你的第一个Web应用
【10月更文挑战第35天】在数字时代的浪潮中,掌握编程技能已成为通往未来的钥匙。本文将带你从零开始,一步步走进PHP的世界,解锁创建动态网页的魔法。通过浅显易懂的语言和实际代码示例,我们将共同打造一个简单但功能强大的Web应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将是你的理想选择。让我们一起探索PHP的魅力,开启你的编程之旅!
|
9天前
|
IDE PHP 开发工具
【PHP开发专栏】Xdebug在PHP调试中的应用
Xdebug 是一个功能强大的 PHP 扩展,提供调试、代码分析和性能分析等功能。本文介绍了 Xdebug 的基本概念、安装配置方法及在 PHP 调试中的应用技巧,包括断点调试、堆栈跟踪、远程调试和性能分析等。通过合理使用 Xdebug,可以显著提高调试效率和代码质量。
22 3
|
9天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
随着互联网技术的发展,前后端分离成为Web开发的主流模式。本文介绍RESTful API的基本概念、设计原则及在PHP中的实现方法。RESTful API是一种轻量级、无状态的接口设计风格,通过HTTP方法(GET、POST、PUT、DELETE)操作资源,使用JSON或XML格式传输数据。在PHP中,通过定义路由、创建控制器、处理HTTP请求和响应等步骤实现RESTful API,并强调了安全性的重要性。
16 2
|
11天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
18 3
|
11天前
|
前端开发 PHP 云计算
PHP在Web开发中的不可替代性###
——守护Web开发基石,PHP的独特魅力与广泛应用解析
|
13天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP 自发布以来一直在 Web 开发领域占据重要地位,历经多次重大更新,从简单的脚本语言进化为支持面向对象编程的现代语言。本文探讨 PHP 的演进历程,重点介绍其在 Web 开发中的应用及框架创新。自 PHP 5.3 引入命名空间后,PHP 迈向了面向对象编程时代;PHP 7 通过优化内核大幅提升性能;PHP 8 更是带来了属性、刚性类型等新特性。
23 3
|
13天前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
14天前
|
弹性计算 算法 PHP
PHP在现代Web开发中的不可替代性###
【10月更文挑战第27天】 如今互联网技术日新月异,前后端开发逐渐融合,但PHP凭借其灵活性、广泛应用和深厚社区基础,依然在Web开发领域占据重要地位。本文将深入探讨PHP为何能在现代Web开发中保持其不可替代的地位,并分析其未来的发展趋势。 ###
31 1
|
15天前
|
Unix Linux PHP
PHP在Web开发中的平台独立性优势###
本文探讨了PHP的跨平台特性,阐述其作为服务器端脚本语言如何在不同操作系统上无缝运行,以及这一特性为开发者和组织带来的便利性和成本效益。 ###