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 相关文章推荐
我的论坛源代码(四)
Oct 09 PHP
php和js交互一例-PHP教程,PHP应用
Jan 03 PHP
PHP执行linux系统命令的常用函数使用说明
Apr 27 PHP
使用php批量删除数据库下所有前缀为prefix_的表
Jun 09 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
php从字符串创建函数的方法
Mar 16 PHP
php动态生成版权所有信息的方法
Mar 24 PHP
php进行ip地址掩码运算处理的方法
Jul 11 PHP
微信 开发生成带参数的二维码的实例
Nov 23 PHP
php微信公众号开发之图片回复
Oct 20 PHP
smarty模板的使用方法实例分析
Sep 18 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
js数组操作学习总结
2013/11/04 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
vue环境搭建简单教程
2017/11/07 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
Python 创建空的list,以及append用法讲解
2018/05/04 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
django 消息框架 message使用详解
2019/07/22 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
python轮询机制控制led实例
2020/05/03 Python
Python 字典中的所有方法及用法
2020/06/10 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
Shell如何接收变量输入
2012/09/24 面试题
车间工艺员岗位职责
2013/12/09 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
违纪检讨书范文
2015/01/27 职场文书
会计专业自荐信范文
2015/03/05 职场文书
会计求职自荐信
2015/03/26 职场文书
孩子满月酒答谢词
2015/09/30 职场文书