深入分析PHP const与define使用区别

注意:define不能定义在类中,而const必须定义在类中,并且const必须通过类名::变量名来进行访问

1、const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,在任何地方都可以访问。
2、define不能在类中定义而const可以。
3、const不能在条件语句中定义常量

4、const采用一个普通的常量名称,define可以采用表达式作为名称。
5、const只能接受静态的标量,而define可以采用任何表达式。
6、const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量
7.使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。

define是定义常量的,如果在类中定义常量呢?当然不能用define,而用const,如下例:

 代码如下 复制代码

<?php
//在类外面通常这样定义常量
define("PHP","111cn.net");
class MyClass
{
    //常量的值将始终保持不变。在定义和使用常量的时候不需要使用$符号
    const constant = 'constant value';
 
    function showConstant() {
        echo  self::constant . "<br>";
    }
}
 
echo MyClass::constant . "<br>";
 
$classname = "MyClass";
echo $classname::constant . "<br>"; // PHP 5.3.0之后
 
$class = new MyClass();
$class->showConstant();
echo $class::constant."<br>"; // PHP 5.3.0之后
//print_r(get_defined_constants());  //可以用get_defined_constants()获取所有定义的常量
?>

一般是define在类外定义常量,const在类内定义常量,并且const必须通过类名::变量名来进行访问。但是php5.3以上支持类外通过const定义常量,看如下,这样是ok的:

 代码如下 复制代码

<?php
    //@blog<http://www.111cn.net>
    const a = "abcdef";
    echo a;
?>

关于常量的基础知识,这里不说了,除了以上,define和const的其它区别(摘自网络):

1.const不能再条件语句中定义常量,但是define是可以的,如下:

 

 代码如下 复制代码
<?php
    if(1){
        const a = 'java';
    }
    echo a;  //必错
?>

2.const采用一个普通的常量名称,define可以采用表达式作为名称

 代码如下 复制代码

<?php
const  FOO = 'PHP';
 
for ($i = 0; $i < 32; ++$i) {
    define('PHP_' . $i, 1 << $i);
}
?>

3.const只能接受静态的标量,而define可以采用任何表达式。

 

 代码如下 复制代码
<?php
const PHP = 1 << 5;    // 错误
define('PHP', 1 << 5); // 正确
?>

4.const本身就是一个语言结构。而define是一个函数。所以使用const速度要快的多。

两个共同步:两者都是不能进行重新赋值。

时间: 2024-10-12 09:18:15

深入分析PHP const与define使用区别的相关文章

c++中#define 与const用法有什么区别? 如下的程序错在了什么地方?

问题描述 c++中#define 与const用法有什么区别? 如下的程序错在了什么地方? #include using namespace std; #define pi 3.1415; const float PI=3.14; int main() { system("color 4A"); float s1,s2,r; cin>>r; s1=PI*r*r; s2=pi*r*r; cout<<"s1="<<s1<<

解析php中static,const与define的使用区别_php技巧

define部分:宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段.(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议.)宏的语法为:#define 宏名称 宏值作为一种建议和一种广大程序员共同的习惯,宏名称经常使用全部大写的字母.利用宏的优点:1)让代码更简洁明了当然,这有赖于你为宏取一个适当的名字.一般来说,宏的名字更要注重有明确直观的意义,有时宁可让它长点.2)方便代码维护对宏的处理,在编译过程中称为"预处理".也就是说在正式编译前,编译器必须先将代码出现的宏,用

typedef 和define的区别

总结一下typedef和#define的区别 1.概念   #define 它在编译预处理时进行简单的替换,不作正确性检查.它是预处理指令.   typedef 它在自己的作用域内给一个已经存在的类型一个别名.它是在是在编译时处理的. 例子: #define: #define DO double DO val =5;//相当于 double va =5; #define FUN(X) X+5 int va = FUN(3); //相当于 va = 3+5 typedef: typedef dou

C#中 const 和 readonly 的区别

ado|区别 const 和 readonly 的区别,总是不太清楚,于是查了查资料.   const 的概念就是一个包含不能修改的值的变量.常数表达式是在编译时可被完全计算的表达式.因此不能从一个变量中提取的值来初始化常量.如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的.   readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值.因为 readonly 是在计算时执行的,当然它可以用某些变量初

51单片机编程sbit与#define的区别

问题描述 51单片机编程sbit与#define的区别 在keil编程中: #define dula P2^6不对 而必须sbit dula=P2^6: 请问为何? 解决方案 #define是宏定义,定义的东西编译时由编译器进行宏展开 sbit是外部位声明,就是单片机的外部端口 bit是内部20H-2FH的可寻址位定义或着是声明 以上指令都有固定的用途 解决方案二: sbit就是定义一个标志位,也叫位变量,比如一个8位的寄存器就可以看作八个位变量. #define就是替代或者替换的意思,

深入分析php中const和define定义常量的区别

大家都知道define是定义常量的,如果在类中定义常量呢?当然不能用define,而用const,如下例:  代码如下 复制代码 <?php define('PHP', 'I love PHP'); // 在类外面通常这样定义常量 if (defined('PHP')) {     echo 'PHP is defined!'; }   class MyClass {     // 常量的值将始终保持不变.在定义和使用常量的时候不需要使用$符号     const CONSTANT = 'con

解析php中const与define的应用区别_php技巧

1.const用于类成员变量定义,一旦定义且不能改变其值.define定义全局常量,在任何地方都可以访问.2.define不能在类中定义而const可以.3.const不能在条件语句中定义常量 复制代码 代码如下: if (...) {     const FOO = 'BAR';    // invalid } but if (...) {     define('FOO', 'BAR'); // valid } 4.const采用一个普通的常量名称,define可以采用表达式作为名称. 复制

oracle index unique scan/index range scan和mysql range/const/ref/eq_ref的区别

关于oracle index unique scan/index range scan和mysql range/const/ref/eq_ref type的区别    关于ORACLE index unique scan和index range scan区别在于是否索引是唯一的,如果=操作谓词有唯一索引则使用unique scan否则则使用range scan 但是这种定律视乎在MYSQL中不在成立 如下执行 kkkm2 id为主键 mysql> explain extended select

typedef和#define的用法以及区别_C 语言

一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: typedef    int       INT;typedef    int       ARRAY[10];typedef   (int*)   pINT; typedef可以增强程序的可读性,以及标识符的灵活性,但它也有"非直观性"等缺点. 二.#define的用法 #define为一宏定义语句,通常用它来定义常量(包括无参