zoukankan      html  css  js  c++  java
  • php中 const 与define()的区别 ,选择

    来自: http://stackoverflow.com/questions/2447791/define-vs-const

    相同点: 两者都可以定义常量

    const  FOO = 'BAR';
    defind('FOO','BAR');

    const 的劣势之处:

    1.const 必须被声明在top-level-scope中(顶级域)..

    例如:

    if(condition) {
        const FOO ='BAR';   //未定义          
    }
    
    //但是
    if(condition) {
        defind('FOO','BAR'); //定义          
    }

    一个常用的检测常量是否定义的方式:

    if (!defined('FOO')) {
        define('FOO', 'BAR');
    }

    2.const 接受一个静态的标量类型(number,string,true.false,null,__FILE__,......),反之,defind()接受任何表达式。

    但是,自PHP 5.6以后常量表达式也被允许在const中使用:

    const BIT_5 = 1 << 5;    // PHP 5.6之后 valid ,之前 invalid
    define('BIT_5', 1 << 5); // always valid

    3.const 接受一个plain(?不知道翻译成啥,就是常量名称固定的意思)常量名,然而,defind()接受任何表达式作为常量名

    for ($i = 0; $i < 32; ++$i) {
        define('BIT_' . $i, 1 << $i);
    }

    4.const 定义的常量名是区分大小写的,define()允许你不区分大小写,只要将第三个参数传递true即可..

    define('FOO','BAR',true);
    
    echo FOO; //BAR
    echo foo; //BAR
    echo Foo; //BAR

    以上就是const不好的一面,现在让我们看看除非发生以上的情况,我个人推荐使用const的理由.

    1.const  易读,是一个语言结构,不是一个方法,也可以在类中使用定义常量

    2.const 可以在当前命名空间定义常量,但是define()不得不传递完整的命名空间名称。(一个可以是相对的,一个必须是绝对的)

    namespace ABC;
    // To define the constant ABCFOO:
    const FOO = 'BAR';
    define('ABCFOO', 'BAR');

    3.const 自PHP 5.6定义常量值可以使用数组,然而define()不支持数组,但是在PHP 7 将支持这一个特性.

    const FOO = [1, 2, 3];    // valid in PHP 5.6
    define('FOO', [1, 2, 3]); // invalid in PHP 5.6, valid in PHP 7.0

    4.const 是语言结构,被定义在编译时,define()定义在运行时,const 比defind()快

    5. 最后一点,const可以在类中定义常量,而 define()不可以.

    class Foo {
        const BAR = 2; // valid
    }
    // but
    class Baz {
        define('QUX', 2); // invalid
    }

    摘要

    除非你要使用表达式或在条件判断语句中定义常量,那么使用 const 是你 居家旅行,杀人灭口必备之良药。

  • 相关阅读:
    Security headers quick reference Learn more about headers that can keep your site safe and quickly look up the most important details.
    Missing dollar riddle
    Where Did the Other Dollar Go, Jeff?
    proteus 与 keil 联调
    cisco router nat
    router dhcp and dns listen
    配置802.1x在交换机的端口验证设置
    ASAv931安装&初始化及ASDM管理
    S5700与Cisco ACS做802.1x认证
    playwright
  • 原文地址:https://www.cnblogs.com/tumio/p/5470110.html
Copyright © 2011-2022 走看看