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 相关文章推荐
PHP 单引号与双引号的区别
Nov 24 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
Codeigniter实现多文件上传并创建多个缩略图
Jun 12 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
php里array_work用法实例分析
Jul 13 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 PHP
Laravel配合jwt使用的方法实例
Oct 25 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 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
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
2013/07/01 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
详解JS函数重载
2014/12/04 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
python字符串编码识别模块chardet简单应用
2015/06/15 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
python解析xml简单示例
2019/06/21 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
音乐系毕业生自荐信
2013/10/27 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
电台广播稿范文
2015/08/19 职场文书
2016年五一促销广告语
2016/01/28 职场文书