const没define好用 php,PHP define和const的区别

2629ec01820b11e8d54ca6fc12c22d57.png

在PHP 5.3中有两种定义常量的方法:使用

const FOO = 'BAR';

define('FOO', 'BAR');

这两种方法的根本区别在于,const在编译时定义常量,而define在运行时定义它们。这导致了const的大部分缺点。const的一些缺点是:

缺点一

不能使用const来有条件地定义常量。要定义一个全局常量,它必须在最外面的作用域中使用:

if (...) {

const FOO = 'BAR'; // Invalid

}

// but

if (...) {

define('FOO', 'BAR'); // Valid

}

你为什么要这么做呢?一个常见的应用程序是检查常数是否已经定义:

if (!defined('FOO')) {

define('FOO', 'BAR');

}

缺点二

const接受静态标量(数字、字符串或其他常量,如真、假、空、剩余的file__),而define()接受任何表达式。因为PHP 5.6常量表达式在const中也是允许的:

const BIT_5 = 1 << 5; // Valid since PHP 5.6 and invalid previously

define('BIT_5', 1 << 5); // Always valid

缺点三

const接受普通常量名称,而define()接受任何表达式作为名称。这允许做这样的事情:

for ($i = 0; $i < 32; ++$i) {

define('BIT_' . $i, 1 << $i);

}

缺点四

consts总是区分大小写的,而define()允许你通过传递true作为第三个参数来定义不区分大小写的常量(注意:在PHP 7.3.0中定义不区分大小写的常量是不赞成的):

define('FOO', 'BAR', true);

echo FOO; // BAR

echo foo; // BAR

优点

这就是事情不好的一面。现在让我们看看什么情况下使用const:

const只是读得更好。它是一种语言构造,而不是函数,并且与在类中定义常量的方式一致。

const作为一种语言结构,可以通过自动化工具进行静态分析。

const在当前名称空间中定义一个常量,而define()必须传递完整的名称空间名称。

因为PHP 5.6 const常量也可以是数组,而define()还不支持数组。但是,在PHP 7中,这两种情况都支持数组。

最后,请注意,const还可以在类或接口中用于定义类常量或接口常量。define不能用于此目的:

class Foo {

const BAR = 2; // Valid

}

// But

class Baz {

define('QUX', 2); // Invalid

}

总结

除非您需要任何类型的条件定义或表达式定义,否则请使用consts而不是define()。

原创文章,作者:犀牛前端部落,如若转载,请注明出处:https://www.pipipi.net/4557.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值