前面的话

  常量在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__;//
?>

前端学php之常量的更多相关文章

  1. 前端学做 PPT

    前端学做 PPT 公司做技术分享.年终总结都需要用到ppt. 要快速.省事的做出高质量的 ppt,一方面需要熟练使用制作 ppt 的工具,另一方面得知道用工具做成什么样子才是好作品.前者比较简单,后者 ...

  2. 前端学HTTP之网络基础

    × 目录 [1]网络 [2]OSI [3]TCP/IP 前面的话 HTTP协议对于前端工程师是非常重要的.我们在浏览网站时,访问的每一个WEB页面都需要使用HTTP协议实现.如果不了解HTTP协议,就 ...

  3. 前端学PHP之Smarty模板引擎

    前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进. ...

  4. 前端学HTTP之web攻击技术

    前面的话 简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象.应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标.本文将详细介绍攻击web站点 ...

  5. 前端学HTTP之数据传输

    × 目录 [1]客户机处理 [2]集线器处理 [3]路由器1处理[4]路由器2处理[5]交换机处理[6]服务器处理[7]反向传输 前面的话 上一篇中,介绍了网络基础.本文将详细介绍客户机在浏览网页ab ...

  6. 前端学PHP之PDO预处理语句

    × 目录 [1]定义 [2]准备语句 [3]绑定参数[4]执行查询[5]获取数据[6]大数据对象 前面的话 本来要把预处理语句和前面的基础操作写成一篇的.但是,由于博客园的限制,可能是因为长度超出,保 ...

  7. 前端学PHP之mysql扩展函数

    × 目录 [1]连接数据库 [2]使用数据库 [3]执行SQL查询[4]操作结果集[5]关闭连接 前面的话 mysql由于其体积小.速度快.总体拥有成本低,尤其是具有开放源码这一特点,许多中小型网站为 ...

  8. 前端学PHP之文件操作

    × 目录 [1]文件类型 [2]文件属性 [3]目录路径[4]目录遍历[5]目录统计[6]目录增删[7]目录复制[8]文件操作[9]文件内容 前面的话 在程序运行时,程序本身和数据一般都存在内存中,当 ...

  9. 前端学PHP之字符串函数

    × 目录 [1]特点 [2]输出 [3]空格[4]大小写[5]HTML[6]格式化[7]比较 前面的话 字符串的处理和分析在任何编程语言中都是一个重要的基础,往往是简单而重要的.信息的分类.解析.存储 ...

随机推荐

  1. Spark Application的调度算法

    要想明白spark application调度机制,需要回答一下几个问题: 1.谁来调度? 2.为谁调度? 3.调度什么? 3.何时调度? 4.调度算法 前四个问题可以用如下一句话里来回答:每当集群资 ...

  2. nginx下搭建CodeIgniter问题集锦

    nginx环境下CodeIgniter会出现一些问题! 1.数据库驱动连接失败! 出现如下问题: A PHP Error was encountered Severity: Warning Messa ...

  3. NOI2016退役记

    具体写点儿什么还没想好,先挖坑吧.

  4. Redis集群最佳实践

    今天我们来聊一聊Redis集群.先看看集群的特点,我对它的理解是要需要同时满足高可用性以及可扩展性,即任何时候对外的接口都要是基本可用的并具备一定的灾备能力,同时节点的数量能够根据业务量级的大小动态的 ...

  5. String对象方法扩展

    /** *字符串-格式化 */ String.prototype.format = function(){ var args = arguments;//获取函数传递参数数组,以便在replace回调 ...

  6. 最小生成树 prime poj1258

    题意:给你一个矩阵M[i][j]表示i到j的距离 求最小生成树 思路:裸最小生成树 prime就可以了 最小生成树专题 AC代码: #include "iostream" #inc ...

  7. php下载中文名文件

    $path = APPPATH . '../htdocs/download/corp/商标申请委托书模版.doc';$filename = '商标申请委托书模版.doc';header("C ...

  8. 转载一些Android性能优化建议

    首先给出原文链接,感谢大神的经验分享:http://www.jointforce.com/jfperiodical/article/3553?utm_source=tuicool&utm_me ...

  9. c/c++头文件_string

    string, cstring, string.h 一.string头文件 主要包含一些字符串转换的函数 // sto* NARROW CONVERSIONS// sto* WIDE CONVERSI ...

  10. Spring之注入的几种方式

    普通注入 在配置文件里 <!-- 构造注入 --> <bean id="user1" class="entity.User"> < ...