前面的话

  常量在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. 风雪之隅(Laruence PHP开发组成员, Zend兼职顾问, Yaf, Yar, Yac, Opcache等项目作者、维护者.)

    http://www.laruence.com/?from=inf&wvr=5&loc=infblog

  2. ubuntu开启sshd服务(转)

    SSH分客户端openssh-client和openssh-server如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudo apt-ge ...

  3. linux 批量创建用户获取8位随机密码

    #创建账号  分组不分组只有一列useradd无法添加三个账号 添加账号  获取密码  执行最后一句echo stu{4..6}|xargs -n 1|sed -r 's#(.*)#useradd \ ...

  4. 【采集层】Kafka 与 Flume 如何选择

    转自:http://my.oschina.net/frankwu/blog/355298 采集层 主要可以使用Flume, Kafka两种技术. Flume:Flume 是管道流方式,提供了很多的默认 ...

  5. array、isset、三元运算符、find()

    array('name','getName',3,'callback'), // 对name字段在新增和编辑的时候回调getName方法 if(isset($_GET['id'])) { // 根据i ...

  6. mssql占用80端口解决办法

    services.msc

  7. C struct的内存对齐

    说明:如果你看到了这篇,请略过. struct是复合类型. 其中的成员在内存中的分布都是对齐的. 这个对齐的意思是,struct的sizeof运算结果必定是其最大类型长度的整数倍. --注意,如果st ...

  8. yuv420格式分析

    http://blog.csdn.net/liuhongxiangm/article/details/9135791 http://blog.csdn.net/bluesky_sunshine/art ...

  9. hoj Counting the algorithms

    贪心加树状数组 给出的数据可能出现两种情况,包括与不包括,但我们从右向左删就能避免这个问题. #include<stdio.h> #include<string.h> #inc ...

  10. linux基础知识的总结

    例如以下内容是我对linux基础知识的总结,由于本人在初期学习linux的时候走了不少的弯路,对于基础的掌握耗费了不少的时间,所以为了后来者对linux的基础部分有个清晰的了解,特对基础知识进行了总结 ...