PHP define和const的区别

PHP define和const的区别

在PHP 5.3中有两种定义常量的方法:使用const关键字或使用define()函数:

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()。

(0)
上一篇 2020年10月20日 下午3:58
下一篇 2020年10月20日 下午5:07

相关推荐

发表评论

登录后才能评论