• 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 是你 居家旅行,杀人灭口必备之良药。

  • 相关阅读:
    【问题】SUSE已经安装了libsodium,安装zeromq时出现下面的错误?
    将博客搬至CSDN
    iOS开发之self.abc = nil与[_abc release]的区别
    Swift编程语言入门教程
    如何使用NSData处理数据
    集合之間的轉換
    數組排序
    集合类的用法总结(NSArray、NSDictionary、NSSet)
    NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、改变)
    instancetype和id的区别
  • 原文地址:https://www.cnblogs.com/tumio/p/5470110.html
Copyright © 2020-2023  润新知