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 相关文章推荐
解决phpmyadmin 乱码,支持gb2312和utf-8
Nov 20 PHP
用PHP制作的意见反馈表源码
Mar 11 PHP
php简单静态页生成过程
Mar 27 PHP
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
微信自定义分享php代码分析
Nov 24 PHP
PHP 类与构造函数解析
Feb 06 PHP
php使用 readfile() 函数设置文件大小大小的方法
Aug 11 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
PHP中的超全局变量
2006/10/09 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
详解redux异步操作实践
2018/08/15 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
Python字符转换
2008/09/06 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
联欢晚会主持词
2014/03/25 职场文书
《赶海》教学反思
2014/04/20 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
浅析python中特殊文件和特殊函数
2022/02/24 Python