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 相关文章推荐
优化使用mysql存储session的php代码
Jan 10 PHP
关于页面优化和伪静态
Oct 11 PHP
php全角字符转换为半角函数
Feb 07 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
php数组合并array_merge()函数使用注意事项
Jun 19 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 PHP
PHP图像处理类库MagickWand用法实例分析
May 21 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
php阳历转农历优化版
Aug 08 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
基于php编程规范(详解)
Aug 17 PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 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
一个域名查询的程序
2006/10/09 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
php rsa加密解密使用详解
2015/01/14 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
javascript 定义新对象方法
2010/02/20 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python遍历pandas数据方法总结
2018/02/09 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
Python中bisect的使用方法
2019/12/31 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
Python使用Pygame绘制时钟
2020/11/29 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
高中班长竞选稿
2015/11/20 职场文书
学校体育节班级口号
2015/12/25 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
DE1103使用报告
2022/04/05 无线电