PHP常量define和const的区别详解


Posted in PHP onMay 18, 2019

前言

常量是一个简单的标识符。在脚本执行期间该值不能改变(除了所谓的魔术常量,他们其实不是常量)。常量默认大小写敏感。通常常量标识符总是大写的。

可以用define()函数来定义常量。在php5.3.0以后,可以使用const关键字在类定义的外部定义常量,先前版本const关键字只能在类(class)中使用。一个常量一旦被定义,就不能再改变或取消定义。

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

可以简单的通过指定其名字来获得常量的值,与变量不同,不应该在常量的前面加上$符号。如果常量名是动态的,也可以用函数constant()来获取常量的值。用get_defined_contstants()可以获得所有已定义的常量列表。

常量和变量有如下不同:

1、常量前面没有美元符号($)
2、常量只能通过define()函数定义,而不能通过赋值语句

3、常量可以不用理会变量的作用域在任何地方定义和访问

4、常量一旦定义就不能重新定义或取消定义

5、常量的值只能是标量

<?php
// 以下代码在 PHP 5.3.0 后可以正常工作
const USERNAME = 'zhouguowei';
echo USERNAME;
echo constant("USERNAME");
 
const ZHOUUSERNAME = 'zhouguowei2222222222';
 
define('MYUSERNAME','zhouguowei1111111');
echo "<pre>";
print_r(get_defined_constants()); 
?>

问:在php中定义常量时,const和define的区别?

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

1、const用于类成员变量的定义,一经定义,不可修改。Define不可以用于类成员变量的定义,可用于全局常量。

2、Const可在类中使用,define不能

3、Const不能再条件语句中定义常量

<?php
if (...){
const FOO = 'BAR'; // 无效的invalid
}
if (...) {
define('FOO', 'BAR'); // 有效的valid
}
?>

4、const采用普通的常量名称,define可以采用表达式作为名称

<?php
const FOO = 'BAR';
for ($i = 0; $i < 32; ++$i) {
define('BIT_' . $i, 1 << $i);
}
?>

5、const只能接受静态的标量,而define可以采用任何表达式

<?php
const BIT_5 = 1 << 5; // 无效的invalid
define('BIT_5', 1 << 5); // 有效的valid
?>

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

<?php
define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR
?>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
APMServ使用说明
Oct 23 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
Oct 30 PHP
php返回json数据函数实例
Oct 09 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP静态成员变量
Feb 14 PHP
万能的php分页类
Jul 06 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 #PHP
java解析json方法总结
May 16 #PHP
微信支付之JSAPI公众号支付详解
May 15 #PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 #PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 #PHP
yii2的restful api路由实例详解
May 14 #PHP
php的扩展写法总结
May 14 #PHP
You might like
PHP培训要多少钱
2017/06/06 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
初识Node.js
2014/09/03 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Python自动调用IE打开某个网站的方法
2015/06/03 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
公司人力资源的自我评价
2014/01/02 职场文书
企业新年寄语
2014/04/04 职场文书
企业指导教师评语
2014/04/28 职场文书
求职信格式要求
2014/05/23 职场文书
大学活动总结模板
2014/07/10 职场文书
生活委员竞选稿
2015/11/21 职场文书
python 破解加密zip文件的密码
2021/04/22 Python