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 相关文章推荐
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
php实现统计网站在线人数的方法
May 12 PHP
PHP检测用户语言的方法
Jun 15 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 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获取mysql版本的几种方法小结
2008/03/25 PHP
PHP ajax 分页类代码
2008/11/13 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python中文件遍历的两种方法
2014/06/16 Python
Python中处理时间的几种方法小结
2015/04/09 Python
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
人工神经网络算法知识点总结
2019/06/11 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
Python之指数与E记法的区别详解
2019/11/21 Python
思想品德课教学反思
2014/02/10 职场文书
一体化教学实施方案
2014/05/10 职场文书
应届毕业生自荐信
2014/05/28 职场文书
承诺书模板大全
2015/05/04 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript