PHP|3分钟短文|PHP 定义常量,我该用define还是const?这下不迷茫了
引言 我们今天说一下 PHP 编程中 , 定义一个常量所使用的两种方法 。 有哪些区别 , 以及哪种是最佳实践?
本文插图
问题 有开发者说 , 我在学习编写 PHP , 可是定义常量的方法很是让人迷惑 。 比如有下面这样的写法: define('FOO', 1);const FOO = 1;
而且在框架中 , 也大量地掺杂着两种定义方法的混用 。 到底哪一个好?
深层原因 对于 PHP5.3 及以上 , 定义一个常量有两种方法 , 一个是用 const 关键字 , 一个是使用 define 函数 。 比如这样写: const FOO = 'BAR';define('FOO', 'BAR');
这两种方式之间的根本区别是const在编译时定义常量 , 而define在运行时定义常量 。 这导致了大多数const的缺点 。 下面列举一些:
1 - const不能用于有条件地定义常量 。 要定义全局常量 , 必须在最外层范围中使用它:if (...) {const FOO = 'BAR';// 无效}// 但是if (...) {define('FOO', 'BAR'); // 有效}
一种常见的应用是检查常量是否已经定义: if (!defined('FOO')) {define('FOO', 'BAR');}
2 - const只能接受一个静态标量(数字 , 字符串或其它常量值true , false , null , __FILE__) , 而define()可使用任何表达式 。const BIT_5 = 1 << 5;// VPHP 5.6 以下版本均无效define('BIT_5', 1 << 5); // 有效
3 - const只能采用简单的常量名称 , 而define()接受任何表达式作为名称 。 这样可以执行以下操作: for ($i = 0; $i < 32; ++$i) {define('BIT_' . $i, 1 << $i);}
4 - consts始终区分大小写 , 而define()允许您通过将其true作为第三个参数传递来定义不区分大小写的常量 。define('FOO', 'BAR', true);echo FOO; // BARecho foo; // BAR
const 的优点 除了上一节所说的 const 的缺点外 , 我一般都会坚持使用 const 。 因为它实在太好用 , 太可爱了 。
1 - const使代码更好读 。
它是一种语言构造 , 而不是函数 , 并且与您在类中定义常量的方式保持一致 。
2 - const作为一种语言构造 , 可以通过自动化工具进行静态分析 。
3 - const在当前名称空间中定义一个常量 , 同时define()必须传递完整的名称空间名称: namespace A\B\C;// 定义常量 A\B\C\FOO:const FOO = 'BAR';define('A\B\C\FOO', 'BAR');
4 - 由于PHP 5.6const常量也可以是数组 , 而define()尚不支持数组 。 但是 , PHP 7中的两种情况都支持数组 。const FOO = [1, 2, 3];// PHP 5.6 及以上有效define('FOO', [1, 2, 3]); // PHP 7.0 及以上有效
【PHP|3分钟短文|PHP 定义常量,我该用define还是const?这下不迷茫了】 5 - const还可以在类或接口内使用它来定义类常量或接口常量 。 define没这功能 。class Foo {const BAR = 2; // 完全支持}// 但是class Baz {define('QUX', 2); // 不能这么写}
写在最后 除非特别需要 , 我一般不使用 define 定义常量 , 可读性不强 。
加上框架中强制的 OOP 方式 , 使得我们自觉不自觉地形成 const 定义类常量的习惯 。 而且对于 IDE 的自动索引也极为友好 , 写代码顺溜的不得了 。
Happy coding :_)
我是 @程序员小助手, 持续分享编程知识 , 欢迎关注 。
推荐阅读
- |13分钟充满手机,放开限制的125W充电确实恐怖!
- |realme发布125W智慧闪充:3分钟充电33%,20分钟充满
- Realme手机|3分钟闪回33% realme官宣125W智慧闪充技术
- 新机发布|Realme 将于7月发布超快充技术,3分钟即可充电充三分之一
- 互联网|3分钟黑进阿里,马云下死命令留住?阿里辟谣:这种人会交给警察
- 推进组|2020世界人工智能大会(WAIC)在上海召开;哔哩哔哩考虑在香港二次上市;抖音内测3分钟拍摄时长权
- 燕子科技号外|给你3分钟,看完WWDC2020发布会,重点内容汇总
- 京东商城|京东618战报:联想3分钟销量过亿元
- 互联网乱侃秀|天猫上架“时间管理者”!智能实用,3分钟速干,主妇:618必盘