程序员小助手|定义常量,我该用define还是const?这下不迷茫了,3分钟短文|PHP

引言我们今天说一下PHP编程中 , 定义一个常量所使用的两种方法 。 有哪些区别 , 以及哪种是最佳实践?
程序员小助手|定义常量,我该用define还是const?这下不迷茫了,3分钟短文|PHP
文章图片
问题有开发者说 , 我在学习编写PHP , 可是定义常量的方法很是让人迷惑 。 比如有下面这样的写法:
define('FOO',1);constFOO=1;而且在框架中 , 也大量地掺杂着两种定义方法的混用 。 到底哪一个好?
深层原因对于PHP5.3及以上 , 定义一个常量有两种方法 , 一个是用const关键字 , 一个是使用define函数 。 比如这样写:
constFOO='BAR';define('FOO','BAR');这两种方式之间的根本区别是const在编译时定义常量 , 而define在运行时定义常量 。 这导致了大多数const的缺点 。 下面列举一些:
1-const不能用于有条件地定义常量 。 要定义全局常量 , 必须在最外层范围中使用它:
if(...){constFOO='BAR';//无效}//但是if(...){define('FOO','BAR');//有效}一种常见的应用是检查常量是否已经定义:
if(!defined('FOO')){define('FOO','BAR');}2-const只能接受一个静态标量(数字 , 字符串或其它常量值true , false , null , __FILE__) , 而define()可使用任何表达式 。
constBIT_5=1<<5;//VPHP5.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);echoFOO;//BARechofoo;//BARconst的优点除了上一节所说的const的缺点外 , 我一般都会坚持使用const 。 因为它实在太好用 , 太可爱了 。
1-const使代码更好读 。
它是一种语言构造 , 而不是函数 , 并且与您在类中定义常量的方式保持一致 。
2-const作为一种语言构造 , 可以通过自动化工具进行静态分析 。
3-const在当前名称空间中定义一个常量 , 同时define()必须传递完整的名称空间名称:
namespaceABC;//定义常量ABCFOO:constFOO='BAR';define('ABCFOO','BAR');4-由于PHP5.6const常量也可以是数组 , 而define()尚不支持数组 。 但是 , PHP7中的两种情况都支持数组 。
constFOO=[1,2,3];//PHP5.6及以上有效define('FOO',[1,2,3]);//PHP7.0及以上有效5-const还可以在类或接口内使用它来定义类常量或接口常量 。 define没这功能 。
classFoo{constBAR=2;//完全支持}//但是classBaz{define('QUX',2);//不能这么写}写在最后除非特别需要 , 我一般不使用define定义常量 , 可读性不强 。
加上框架中强制的OOP方式 , 使得我们自觉不自觉地形成const定义类常量的习惯 。 而且对于IDE的自动索引也极为友好 , 写代码顺溜的不得了 。
Happycoding:_)
【程序员小助手|定义常量,我该用define还是const?这下不迷茫了,3分钟短文|PHP】我是@程序员小助手 , 持续分享编程知识 , 欢迎关注 。


    推荐阅读