前面的话

  常量在javascript中并不存在,在php中却是与变量并列的重要内容。常量类似变量,但常量一旦被定义就无法更改或撤销定义。常量最主要的作用是可以避免重复定义,篡改变量值,提高代码可维护性。下面将详细介绍php中的常量

定义常量

  常量是一个简单值的标识符。如同其名称所暗示的,在脚本执行期间一个常量一旦被定义,就不能再改变或取消定义。常量默认为大小写敏感。按照惯例常量标识符总是大写的

  常量名和其它任何PHP标签遵循同样的命名规则。合法的常量名以字母或下划线开始,后面跟着任何字母,数字或下划线

  和超全局变量一样,常量的范围是全局的。不用管作用区域就可以在脚本的任何地方访问常量

  常量只能包含标量数据(boolean、integer、float和string)。可以定义resource常量,但应尽量避免,因为会造成不可预料的结果

define()函数

  定义常量使用define()函数,它使用三个参数:首个参数定义常量的名称,第二个参数定义常量的值,可选的第三个参数规定常量名是否对大小写敏感,默认是false

bool define ( string name, mixed value [, bool case_insensitive] )
<?php
$p = 'PI0';
define('PI',3.14);
define('PI',3.15);//无效,因为常量无法被修改定义 define($p,3.14);
echo PI;//3.14 echo "<br>";
echo PI0;//3.14 ?>

const

  在PHP5.3.0以后,可以使用const关键字在类定义之外定义常量

  使用const关键字定义常量必须处于最顶端的作用区域,因为用此方法是在编译时定义的。这就意味着不能在函数内,循环内以及if语句之内用const来定义常量

<?php
// 以下代码在 PHP 5.3.0 后可以正常工作 const CONSTANT = 'Hello World';
echo CONSTANT;
?>

常量检测

  对于常量来说,通常要检测常量是否定义或检测常量的值,涉及到defined()函数和constant()函数

defined()函数

  defined()函数用来判断一个常量是否已经定义,其语法格式为:

bool defined(string constants_name)

若存在则返回true,否则返回false

  如果常量被重复定义后,PHP解析器会发出"Constant XXX already defined"的警告,提醒该常量已被定义过

<?php
define("PI1",3.14);
$p = "PI1";
$is1 = defined($p);
$is2 = defined("PI2");
var_dump($is1);//bool(true) var_dump($is2);//bool(false) ?>

constant()函数

  constant()函数用来返回一个常量的值,语法格式为:

mixed constant(string constant_name)
<?php
$p;
define("PI1",3.14);
define("PI2",3.142);
$height = "中";
if($height == "中"){
$p = "PI1";
}else{
$p = "PI2";
}
$r = 1;
$area = constant("PI") * $r * $r;
echo $area;
?>

系统常量

  在php中,除了可以自己定义常量外,还预定义了一系列系统常量,可以在程序中直接使用来完成一些特殊功能。下面是一些在系统中常见的预定义常量

PHP_OS        UNIX或WINNT等     执行PHP解析的操作系统名称
PHP_VERSION 5.2.6等 当前PHP的版本号
E_ERROR 1 错误,导致PHP脚本运行停止
E_WARNING 2 警告,不会导致PHP脚本运行停止
E_PARSE 4 解析错误,帽程序解析器报告
E_NOTICE 8 非关键的错误,例如变量未初始化
M_PI 3.1415926535898 数学中的PI值

完整的系统常量列表移步至此

<?php
echo PHP_VERSION;//5.5.12 echo "<br />";
echo PHP_OS;//WINNT echo "<br />";
?>

魔术常量

  PHP中有8个系统常量会根据它们使用的位置改变而改变,这样的常量被称为魔术常量

__LINE__        文件中的当前行号。
__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自PHP 4.0.2起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0新增) __FUNCTION__ 函数名称(PHP 4.3.0新加)。自PHP5起本常量返回该函数被定义时的名字(区分大小写)。在PHP4中该值总是小写字母。
__CLASS__ 类的名称(PHP 4.3.0新加)。自PHP5起本常量返回该类被定义时的名字(区分大小写)。在PHP4中该值总是小写字母。类名包括其被声明的作用区域(例如 Foo\Bar)
__TRAIT__ Trait 的名字(PHP 5.4.0新加)。自PHP 5.4起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)
__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)
__NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)
<?php
echo __FILE__;//D:\wamp\www\1.php echo "<br />";
echo __LINE__;//11 ?>

php之常量的更多相关文章

  1. C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)

    #include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...

  2. JavaScript 常量定义

    相信同学们在看见这个标题的时候就一脸懵逼了,什么?JS能常量定义?别逗我好吗?确切的说,JS当中确实没有常量(ES6中好像有了常量定义的关键字),但是深入一下我们可以发现JS很多不为人知的性质,好好利 ...

  3. ES6之变量常量字符串数值

    ECMAScript 6 是 JavaScript 语言的最新一代标准,当前标准已于 2015 年 6 月正式发布,故又称 ECMAScript 2015. ES6对数据类型进行了一些扩展 在js中使 ...

  4. Java常量的应用

    所谓常量,我们可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变. 语法:final 常量名 = 值; 使用fianl关键字 常量名 值 final String a1 = &qu ...

  5. 原创 C++之常量(二)

    4常量的内存分配 4.1应用程序的内存结构 一个由C++编译的应用程序,占用的内存可以划分为如下几个部分: 栈(stack).由编译器自动分配释放.存放函数参数和函数里的局部变量(又称自动变量).其操 ...

  6. 原创 C++之常量(一)

    1概述 一个C++程序就是一系列数据与操作的集合.当一个C++程序开始运行的时候,与该程序相关的数据就会被加载到内存中.当数据与内存发生关联的时候,这些数据就会具有如下的特性: 数据在内存中的地址.这 ...

  7. 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const

    C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...

  8. swift 简介和常量与变量 --- swift 入门

    一.思维导图 二. 代码 //创建UIView 和按钮 let views = UIView(frame: CGRect(x:20, y: 20, width: 100, height: 100))/ ...

  9. java为什么非静态内部类中不能有static修饰的属性,但却可以有常量?

    如:public class InnerClassDemo{int x;class A{static int a = 0;//这样写是不合法的.static final int b=0;//这样写是合 ...

  10. String字符串针对常量池的优化

    String对象是java语言中重要的数据类型,但是不是基本数据类型.相对于c语言的char java做了一些封装和延伸. 针对常量池的优化:当两个String拥有相同的值时,它们只引用常量池中的同一 ...

随机推荐

  1. Eclipse 中 Debug 模式跳转到 exitCurrentThread 的问题解决

    问题描述: Debug 模式启动项目,断点跳转到exitCurrentThread 解决方法: 修改Eclipse 配置 [window]->[Preferences]->[Java]-& ...

  2. 【R】提升R代码运算效率的11个实用方法

    低.有许多种方法可以提升你的代码运算效率,但或许你更想了解运算效率能得到多大的提升.本文将介绍几种适用于大数据领域的方法,包括简单的逻辑调整设计.并行处理和Rcpp的运用,利用这些方法你可以轻松地处理 ...

  3. Hibernate 注解中CascadeType用法汇总

    这两天,参加一个课程设计,同时这个项目又作为一个模块镶嵌到其他项目中,考虑如此,应与原先的架构相同,因牵扯到留言和相互@功能,故数据库之间OneToOne,OneToMany,ManyToMany之风 ...

  4. C# winform 获取当前路径

    // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory// 获取模块的完整路径.System.Diagnostics.Process.Get ...

  5. 利用circpedia 数据库探究circRNA的可变剪切

    circpedia 中收录了利用circexplorer 软件识别到的circRNA, 覆盖了人,小鼠,鸟类,昆虫多个物种的多种细胞系的数据 官网链接如下: http://www.picb.ac.cn ...

  6. C语言简单选择排序

    #include <stdio.h> int main(int argc, char const *argv[]) { // 将数组按照从小到大排序 , , , , , }; int i, ...

  7. 【Java面试题】40 你所知道的集合类都有哪些?主要方法?

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...

  8. 关于Unity 获得和使用GetComponent<MeshFilter>().mesh时的心得

    原文地址:http://blog.sina.com.cn/s/blog_7d9405e50100s061.html 今天在使用Unity3D的时候遇到了一个问题:_tesGameObject是在Pro ...

  9. (转)fiddler模拟post请求

    转自:https://www.cnblogs.com/xiaoxi-3-/p/7612254.html 前言: Fiddler是一个简单的http协议调试代理工具,它界面友好,易于操作,是模拟http ...

  10. Adobe Acrobat 不能打开在线pdf。Adobe Acrobat 应用程序正在被终止,因为内存错误

    Adobe Acrobat 应用程序正在被终止,因为内存错误. Adobe Acrobat 不能打开在线pdf. 当出现上面两种错误时. 原因可能是Acrobat的更新有问题. 解决方法:打开C:\D ...