来自: 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 A\B\C;
// To define the constant A\B\C\FOO:
const FOO = 'BAR';
define('A\B\C\FOO', '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 是你 居家旅行,杀人灭口必备之良药。

php中 const 与define()的区别 ,选择的更多相关文章

  1. C++ 中 const和define的区别

    来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/ 请区别用#define命令定义的符号常量和用con ...

  2. php 中const和 define的区别

    在php中定义常量时,可用到const与define这两种方法,那他们到底有什么区别呢? 1.const用于类成员变量的定义,一经定义,不可修改.define不可用于类成员变量的定义,可用于全局常量. ...

  3. php中const和define的区别

    define部分:宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段.(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议.)宏的语法为:#define 宏名称 宏值作为一种建议和一种广大 ...

  4. php中const与define的区别

    1 版本差异: const 要求php的版本>5.3.0 define 可以兼容php4,php5 等版本 2 定义的位置区别: const关键字定义的常量是在编译时定义的,因此const关键字 ...

  5. C++编程中const和#define的区别

    (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用.(2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有具 ...

  6. 在php中定义常量时,const与define的区别?

    问]在php中定义常量时,const与define的区别?  [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很 ...

  7. 实例讲述PHP面向对象的特性;;;php中const与define的使用区别

    php中const与define的使用区别 1.const:类成员变量定义,一旦定义且不能改变其值. define:定义全局常量,在任何地方都可以访问.2.define:不能在类中定义,而const可 ...

  8. const与#define的区别、优点

    const与#define的区别 编译器处理方式不同 define宏是在预处理阶段展开. 补充:预处理器根据以#开头的命令,修改原始的程序.比如我们常见的#include <stdio.h> ...

  9. C#中 const 和 readonly 的区别

    C#中 const 和 readonly 的区别 来源 https://www.cnblogs.com/gsk99/archive/2008/10/10/1308299.html http://dev ...

随机推荐

  1. 奇葩问题:ListView中Item与Item中的Button不能单击问题

    android中ListView是一个经常要用到的一个组件,用到该组件时经常会碰到ListView的Item和Item中的Button不能单击的问题. 本人在使用时同样也遇到过这样的情况,共有三种情况 ...

  2. jquery轻量级富文本编辑器Trumbowyg

    html: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv=&qu ...

  3. apache Storm学习之三-消息可靠性

    4.1 简介 storm可以确保spout发送出来的每个消息都会被完整的处理.本章将会描述storm体系是如何达到这个目标的,并将会详述开发者应该如何使用storm的这些机制来实现数据的可靠处理. 4 ...

  4. 在工程名.h头文件中写public:

    class CaccessimageApp : public CWinApp { public: _ConnectionPtr m_pConnection; CaccessimageApp(); // ...

  5. js正则表达式的基本语法

    1.正则表达式基本语法 创建正则表达式 var re = new RegExp();//RegExp是一个对象,和Aarray一样 //但这样没有任何效果,需要将正则表达式的内容作为字符串传递进去 r ...

  6. JS怎样捕获浏览器关闭时间弹出自定义对话框

    <script type="text/javascript">window.onbeforeunload = function (e) { e = e || windo ...

  7. 超全面的JavaWeb笔记day13<JSTL&自定义标签>

    1.JSTL标签库(重点) core out set remove url if choose when otherwise forEach fmt formatDate formatNumber 2 ...

  8. GIS-008-ArcGIS JS API 全图

    //待服务加载完成后,设置视野范围到全图范围 layer.on('load', function () { var extent = map.getLayer(map.layerIds[0]).ful ...

  9. Python 转义字符

    转义字符 说明    \    用在一行的末尾,表示续行符    \r    回车    \n    换行符    \\    打印反斜杠    \'    打印单引号    \"    打 ...

  10. cocos2dx游戏--欢欢英雄传说--添加游戏背景

    经过一段时间的学习cocos2dx,接下来我想要实践开发一个小游戏,我把它命名为“欢欢英雄传说”,项目名将取为HuanHero.环境:cocos2dx环境:cocos2d-x 3.11.1IDE:Co ...