PHP中定义常量的区别,define() vs. const

栏目: PHP · 发布时间: 8年前

内容简介:PHP中定义常量的区别,define() vs. const

前言

今天在Stackoverflow又看到一个很有趣的文章,所以翻译过后摘了过来。文章是由 PHP 开发成员之一的NikiC写的,权威性自然毋庸置疑

正文

在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 << 5;    // 在PHP5.6之后有效,之前无效 define('BIT_5', 1 << 5); // 一直有效
  • const 的常量命名只能用直白的文本,而 define() 允许你用任何表达式来对常量命名。这样我们就可以执行以下操作:

for ($i = 0; $i < 32; ++$i) {     define('BIT_' . $i, 1 << $i); }
  • 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_constants hide 来避免这个问题

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

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

class Foo {     const BAR = 2; // 有效 } class Baz {     define('QUX', 2); // 无效 }

总结

除非你需要使用表达式或者在条件语句中定义常量,不然的话仅仅是为了代码的简单可读性你都最好要使用 const


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

逆袭大学

逆袭大学

贺利坚 / 人民邮电出版社 / 2014-3 / 49.00

《逆袭大学——传给IT学子的正能量》以作者近二十年的从教经历和义务为IT学子解答咨询的工作为基础,以认识专业为起点,以编程能力的提高为关键,帮助计算机类专业的大学生更新学习观念、重塑学习品质、培养学习方法,找到自己的大学之路。书中直接解答了学无用处论、专业兴趣、考研、职场等诸多大学生面临的典型困惑。 本书主要面向在校计算机类(包括软件工程、网络工程等)专业高校学生,也能让非计算机类专业的高校......一起来看看 《逆袭大学》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具