PHP常量总结
概念
常量我们可以理解为值不变的量。常量只要被定义了,在程序脚本的其他任何地方都不能改变。
因为常量被定义后不能被修改,所以即使重定义常量的值,常量的值也是第一次定义常量时的值
常量不管在哪里被定义,都具有超全局作用域
常量的定义
常量可以通过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常量总结的更多相关文章
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
- JavaScript 常量定义
相信同学们在看见这个标题的时候就一脸懵逼了,什么?JS能常量定义?别逗我好吗?确切的说,JS当中确实没有常量(ES6中好像有了常量定义的关键字),但是深入一下我们可以发现JS很多不为人知的性质,好好利 ...
- ES6之变量常量字符串数值
ECMAScript 6 是 JavaScript 语言的最新一代标准,当前标准已于 2015 年 6 月正式发布,故又称 ECMAScript 2015. ES6对数据类型进行了一些扩展 在js中使 ...
- Java常量的应用
所谓常量,我们可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变. 语法:final 常量名 = 值; 使用fianl关键字 常量名 值 final String a1 = &qu ...
- 原创 C++之常量(二)
4常量的内存分配 4.1应用程序的内存结构 一个由C++编译的应用程序,占用的内存可以划分为如下几个部分: 栈(stack).由编译器自动分配释放.存放函数参数和函数里的局部变量(又称自动变量).其操 ...
- 原创 C++之常量(一)
1概述 一个C++程序就是一系列数据与操作的集合.当一个C++程序开始运行的时候,与该程序相关的数据就会被加载到内存中.当数据与内存发生关联的时候,这些数据就会具有如下的特性: 数据在内存中的地址.这 ...
- 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...
- swift 简介和常量与变量 --- swift 入门
一.思维导图 二. 代码 //创建UIView 和按钮 let views = UIView(frame: CGRect(x:20, y: 20, width: 100, height: 100))/ ...
- java为什么非静态内部类中不能有static修饰的属性,但却可以有常量?
如:public class InnerClassDemo{int x;class A{static int a = 0;//这样写是不合法的.static final int b=0;//这样写是合 ...
- String字符串针对常量池的优化
String对象是java语言中重要的数据类型,但是不是基本数据类型.相对于c语言的char java做了一些封装和延伸. 针对常量池的优化:当两个String拥有相同的值时,它们只引用常量池中的同一 ...
随机推荐
- 拓扑试验划分简单的静态VLAN
拓扑图 说明: 把交换机连接到PC机的网口类型设置成为access 把交换机与交换机之间的网口类型设置成为truck 然后再给交换机每一个接口划分VLAN 操作如下: 交换机LSW1的配置: 进入输入 ...
- springmvc使用步骤
1.导包 2.在web.xml文件中配置前端控制器dispatchServlet 3.创建springmvc配置文件springmvc.xml 4.编写controller 5.在springmvc中 ...
- Linux双网卡绑定
Linux双网卡绑定 作者:Eric 微信:loveoracle11g eth0和eth1绑定为bond0 [root@rac-node1 ~]# cat /etc/sysconfig/network ...
- MySQL设置远程连接
Window下MySQL设置开启远程连接mysql数据库 1.新建用户远程连接mysql数据库grant all on *.* to admin@'%' identified by '123456' ...
- MYSQL存储过程中 使用变量 做表名
); DECLARE temp2 int; set temp1=m_tableName; set temp2=m_maxCount; set @sqlStr=CONCAT('select * from ...
- 利用(CMD)在Django中创建文件
django项目的创建(在CMD中) 1.切换到你想要存储项目的位置,我这里保存在桌面上 cd Desktop 2.创建一个django项目,项目名叫guest django-admin startp ...
- QQ号码正则判断
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- truncate(can)
1. 如果给了参数, 从头截取到参数位置 2. 如果不给参数, 从头截取到光标 f = open("司马光砸缸", mode="r+", encoding=&q ...
- HTTP中Get、Post、Put与Delete。了解一下!
1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...
- xmlhttp.readyState的值及解释:
xmlhttp.readyState的值及解释: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现在可 ...