概念

常量我们可以理解为值不变的量。常量只要被定义了,在程序脚本的其他任何地方都不能改变。

因为常量被定义后不能被修改,所以即使重定义常量的值,常量的值也是第一次定义常量时的值

常量不管在哪里被定义,都具有超全局作用域

常量的定义

常量可以通过define()函数和const关键字两种形式定义

个人建议,类常量以外的常量定义尽可能使用define

define ( string $name , mixed $value [, bool $case_insensitive = false ] ) 
  case_insensitive可选。默认是false,大小写敏感的。如果设置为 TRUE,该常量则大小写不敏感。
const NAME = VALUE
define (ABC, "") ;    //name可以不加引号,但是不建议这样写
define ("ABC", "1111") ; //define定义常量时推荐常量名带引号
const DEF = ""; //const定义常量时,常量名不能带引号

define()函数和const的区别

1.在php5.3.0以前,const只用于在类内部定义类常量,而无法在类外部定义常量。

在php5.3.0以后,const可以在类外部定义常量,但不能在函数,条件语句,循环语句等的{}语句块中定义常量

2.使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。

3.define可以在在函数,条件语句,循环语句等的{}语句块中定义常量,const不可以

4.const可以定义类常量,而define不可以

5.define可以动态设置常量名,const不可以

6.define常量值可以采用任何表达式,而const只能接受静态的标量

7.const定义的常量大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。

<?php
$hostname = php_uname('n');
//类外正常定义
const C1 = ;
define("C2", );
//{}语句块内不能使用const,可以使用define
if (true) {
const C3 = ; //错误
define("C4", );
}
for ($i=; $i<;$i++) {
const C5= ; //错误
define("C6", );
} function test () {
const C7= ; //错误
define("C8", );
} //define可以动态使用常量名,const不可以
//define常量值可以采用任何表达式,而const只能接受静态的标量
const FOO = 'BAR';
for ($i = ; $i < ; ++$i) {
define('BIT_' . $i, << $i);
define('HOST_NAME' . $i, 'HOST' .$i);
}
//const可以定义类常量
class Collect_notification {
const C9= ;
define("C10", ); //错误。define不能定义类常量 function main(){
const C11= ; //错误。{}语句块内不能使用const
define("C12", );
}
}

常量的使用

有两种形式

  1,直接使用名字

  2,使用constant()函数:constant(“常量名”)函数可以动态地输出不同的常量,在使用上要灵活方便很多

const  FOO = 'BAR';
for ($i = ; $i < ; ++$i) {
define('HOST_NAME' . $i, 'HOST' .$i);
}
echo HOST_NAME0;   //直接使用常量名
echo HOST_NAME1;
for ($i = ; $i < ; ++$i) {
echo constant('HOST_NAME'.$i); //constant()函数动态使用常量
}

常量与变量的区别

定义形式不同 (常量使用define或者const定义);

使用形式不同(常量不需要 $ 符号);

可变程度不同(常量的值不可改变或者销毁);

作用范围不同(常量具有超全局作用域(函数内外都可直接使用));

可用类型不同(常量只能存储标量类型:int,float,string,bool);

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. 拓扑试验划分简单的静态VLAN

    拓扑图 说明: 把交换机连接到PC机的网口类型设置成为access 把交换机与交换机之间的网口类型设置成为truck 然后再给交换机每一个接口划分VLAN 操作如下: 交换机LSW1的配置: 进入输入 ...

  2. springmvc使用步骤

    1.导包 2.在web.xml文件中配置前端控制器dispatchServlet 3.创建springmvc配置文件springmvc.xml 4.编写controller 5.在springmvc中 ...

  3. Linux双网卡绑定

    Linux双网卡绑定 作者:Eric 微信:loveoracle11g eth0和eth1绑定为bond0 [root@rac-node1 ~]# cat /etc/sysconfig/network ...

  4. MySQL设置远程连接

    Window下MySQL设置开启远程连接mysql数据库 1.新建用户远程连接mysql数据库grant all on *.* to admin@'%' identified by '123456' ...

  5. MYSQL存储过程中 使用变量 做表名

    ); DECLARE temp2 int; set temp1=m_tableName; set temp2=m_maxCount; set @sqlStr=CONCAT('select * from ...

  6. 利用(CMD)在Django中创建文件

    django项目的创建(在CMD中) 1.切换到你想要存储项目的位置,我这里保存在桌面上 cd Desktop 2.创建一个django项目,项目名叫guest django-admin startp ...

  7. QQ号码正则判断

    <!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">   ...

  8. truncate(can)

    1. 如果给了参数, 从头截取到参数位置 2. 如果不给参数, 从头截取到光标 f = open("司马光砸缸", mode="r+", encoding=&q ...

  9. HTTP中Get、Post、Put与Delete。了解一下!

    1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...

  10. xmlhttp.readyState的值及解释:

    xmlhttp.readyState的值及解释: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现在可 ...