php define和const的区别,define()与const在PHP中有什么不同

本文对比了PHP中define()和const定义常量的不同之处,包括const在编译时定义、限制在条件语句和全局作用域的应用,以及const的表达式支持、大小写敏感性、性能优势和在类中的使用限制。重点介绍了为何选择const的原因和它们在代码组织上的差异。
摘要由CSDN通过智能技术生成

define()与const在PHP中有什么不同

发布时间:2021-01-19 16:52:50

来源:亿速云

阅读:89

作者:Leah

本篇文章给大家分享的是有关define()与const在PHP中有什么不同,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在PHP5.3中,有两种方法可以定义常量:使用const关键字

使用define()方法const FOO = 'BAR';

define('FOO','BAR');

这两种方式的根本区别在于const会在代码编译时定义一个常量,而define则是在代码运行时才定义一个常量。这就使得const会有以下几个缺点:const不能在条件语句中使用。如果要定义一个全局变量,const必须要处于整个代码的最外层:if (...) {

const FOO = 'BAR';  // 无效的

}

// but

if (...) {

define('FOO', 'BAR'); // 有效的

}

你可以能会问为什么我要这么做?一个最平常的例子是当你在检测一个常量是否已经被定义时:if (!defined('FOO')) {

define('FOO', 'BAR');

}const只能用来声明变量(如数字、字符串,或者true, false, null, _FILE_),而define()还能接受表达式。不过在PHP5.6之后const也可以接受常量的表达式了:const BIT_5 = 1 <

define('BIT_5', 1 <

define('BIT_' . $i, 1 <

}const定义的常量是大小写敏感的,但是define允许你将其第三个参数设置为true来关闭其对大小写的敏感:define('FOO', 'BAR', true);

echo FOO; // BAR

echo foo; // BAR

以上就是你需要注意的几点。那么现在我来说明以下,为什么不涉及以上情况下,我个人总是习惯使用const:const更加易读、美观。

const默认在当前的namespace下定义常量,而使用define则需要你写明整个namespace的完整路径:namespace A\B\C;

// 如果要定义常量 A\B\C\FOO:

const FOO = 'BAR';

define('A\B\C\FOO', 'BAR');自从PHP5.6后,使用const数组也能被定义为常量。而define目前是不支持这一功能的,但是该功能会在PHP7中被实现:const FOO = [1, 2, 3];  // 在PHP 5.6中有效

define('FOO', [1, 2, 3]); // 在PHP 5.6无效, 在PHP 7.0有效因为const在编译时就被执行了,所以它在速度上要比define快一点。

尤其是在使用define定义大量常量时,PHP的运行速度会变得非常慢。人们甚至发明了诸如apc_load_constantshide来避免这个问题

与define相比,const能使定义常量的效率提高一倍(在配置有XDebug的开发机器上,这个差异还会更大)。但是在查询时间上,两者是没有区别的(因为二者用的都是同一个查询表)

最后需要注意的一点是,const可以在class和interface当中使用 ,而define是做不到这一点的:class Foo {

const BAR = 2; // 有效

}

class Baz {

define('QUX', 2); // 无效

}

以上就是define()与const在PHP中有什么不同,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值