栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

define()与const

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
    接受一个静态标量(数字,字符串或其它恒定等
    true
    false
    null
    __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);

    }

  • const
    s始终区分大小写,而
    define()
    允许您通过将其
    true
    作为第三个参数传递来定义不区分大小写的常量(注意:自PHP 7.3.0起不建议使用不区分大小写的常量。):

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

    echo FOO; // BAR
    echo foo; // BAR

所以,那是不好的一面。现在,让我们看看

const
除非出现以下情况之一,否则我个人始终使用的原因:

  • const
    读起来更好。它是一种语言构造,而不是函数,并且与您在类中定义常量的方式保持一致。
  • const
    作为一种语言构造,可以通过自动化工具进行静态分析。
  • const
    在当前名称空间中定义一个常量,同时
    define()
    必须传递完整的名称空间名称:

    namespace ABC;

    // To define the constant ABCFOO:
    const FOO = ‘BAR’;
    define(‘ABCFOO’, ‘BAR’);

  • 由于PHP 5.6

    const
    常量也可以是数组,而
    define()
    尚不支持数组。但是,PHP 7中的两种情况都将支持数组。

    const FOO = [1, 2, 3];    // Valid in PHP 5.6

    define(‘FOO’, [1, 2, 3]); // Invalid in PHP 5.6 and valid in PHP 7.0

最后,请注意,

const
还可以在类或接口内使用它来定义类常量或接口常量。
define
不能用于此目的:

class Foo {    const BAR = 2; // Valid}// Butclass Baz {    define('QUX', 2); // Invalid}

摘要

除非您需要任何类型的条件或表达式定义,否则使用

const
s代替
define()
s-仅出于可读性考虑!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465736.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号