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 5.0 Pear安装方法
Dec 06 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 PHP
PHP滚动日志的代码实现
Jun 10 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
使用Zttp简化Guzzle 调用
Jul 02 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
python中cPickle用法例子分享
2014/01/03 Python
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
Python使用gRPC传输协议教程
2018/10/16 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
浅析Python面向对象编程
2020/07/10 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
统计员岗位职责
2013/11/14 职场文书