问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php中static,const和define的区别

发布网友 发布时间:2022-04-29 09:43

我来回答

2个回答

懂视网 时间:2022-04-29 14:05

在PHP中定义常量时,可用const与define这两种方式,那他们到底有什么区别呢?

1. const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,在任何地方都可以访问。

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

3. const不能在条件语句中定义常量。

4. const采用一个普通的常量名称(静态的标量),define可以采用任何表达式作为名称。

5. const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量。

6.使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。

如果在类中定义常量,不能用define,而用const,如下例:

推荐:《PHP教程》

<?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
 const a = "abcdef";
 echo a;
?>

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

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

<?php
if(1){
 const a = 'java';
 } 
echo a; //必错
?>

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

<?phpconst 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速度要快的多。

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

下面内容摘自Rotted_Pencil的博文:PHP中定义常量的区别,define() vs. const

前言

今天在Stackoverflow又看到一个很有趣的文章,所以翻译过后摘了过来。文章是由PHP开发成员之一的NikiC写的,权威性自然毋庸置疑

正文

在PHP5.3中,有两种方法可以定义常量:

1.使用const关键字

2.使用define()方法

const FOO = ‘BAR’; 
define(‘FOO’,’BAR’);

这两种方式的根本区别在于const会在代码编译时定义一个常量,而define则是在代码运行时才定义一个常量。这就使得const会有以下几个缺点:

const不能在条件语句中使用。如果要定义一个全局变量,const必须要处于整个代码的最外层:

if (...) { 
 const FOO = 'BAR'; // 无效的
}
// but
if (...) {
 define('FOO', 'BAR'); // 有效的
}

你可以能会问为什么我要这么做?一个最平常的例子是当你在检测一个常量是否已经被定义时:

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

const只能用来声明变量(如数字、字符串,或者true, false, null, FILE),而define()还能接受表达式。不过在PHP5.6之后const也可以接受常量的表达式了:

const BIT_5 = 1 << 5; // 在PHP5.6之后有效,之前无效
define('BIT_5', 1 << 5); // 一直有效

const的常量命名只能用直白的文本,而define()允许你用任何表达式来对常量命名。这样我们就可以执行以下操作:

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

const定义的常量是大小写敏感的,但是define允许你将其第三个参数设置为true来关闭其对大小写的敏感:

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

热心网友 时间:2022-04-29 11:13

(1)编译器处理方式不同  define宏是在预处理阶段。  const常量是编译运行阶段使用。(2)类型和安全检查不同  define宏没有类型,不做任何类型检查,仅仅是。  const常量有具体的类型,在编译阶段会执行类型检查。(3)存储方式不同  define宏仅仅是,有多少地方使用,就多少次,不会分配内存。  const常量会在内存中分配(可以是堆中也可以是栈中)。(4)const可以节省空间,避免不必要的内存分配。例如:#definePI3.14159//常量宏constdoulbePi=3.14159;//此时并未将Pi放入ROM中doublei=Pi;//此时为Pi分配内存,以后不再分配!doubleI=PI;//编译期间进行宏替换,分配内存doublej=Pi;//没有内存分配doubleJ=PI;//再进行宏替换,又一次分配内存!const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。(5)提高了效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产车间员工岗位职责及权限、任职要求分别是什么 车间普工岗位职责(集合6篇) "上海"的地名是谁起的,什么意思? 老公的爸妈是表亲,我爸妈也是表兄妹,孩子会怎么样吗? 爸妈是近亲结婚他们是表兄妹 我生孩子会有问题吗? 爸妈是亲表兄妹结婚对这代没事。。不知道下一代有问题没。。。_百度... 鉴证实录 法证女朋友怎么死的0 沈阳御通实业有限公司怎么样? 玉环御通广告有限公司御通服务 问御石通效果怎么样啊,治疗结石的 请问大佬有樱花庄的宠物女孩2012年上映的由松冈祯丞主演的高清视频在线观看资源吗 锂电池保护板接线线路有哪些? 磷酸铁锂电池怎么接连接线呢?大师门请指点 为什么钉钉上课联麦老师连接不上我?- 问一问 我头发很硬 自然卷。 可以用发蜡吗? 头发有轻微自然卷怎么办? 自然卷怎么用发蜡啊 我的头发很贴然后头发自然卷用什么发泥 还是发蜡好呢? 怎样能让头发变的像自然卷一点 我的头发有点自然卷。我想弄个大背头,怎么定型? 头发自然卷,理刘海适合用什么发蜡? 自然卷能用泡沫发蜡吗 发蜡对于自来卷的头发适用吗? 笔记本电脑是双显卡的,玩英雄联盟fps一直固定在60!!怎么设置的更高更流畅一些 女生头发自然卷使用发蜡的问题 为什么玩lol我的fps就一直固定在60 自然卷用什么发蜡好? 寻鱼怎么做最好吃? 男生自来卷发质如何用发蜡塑造? 为什么我的笔记本电脑玩英雄联盟的fps峰值只有60了? 我的世界天堂传送门没反应 我的世界有几种传送门? 天堂传送门怎么做。 《我的世界》天堂传送门为什么做不了? 暗黑破坏神3通往天堂的传送门在哪里 李维斯一款手表的白色帆布表带脏了,该如何清洗? 《我的世界》有哪些传送门? 卡其色帆布表带脏了怎么洗 帆布加牛皮表带怎么清洁? 我的世界中为什么天堂传送门传送不了? 我的世界传送门有哪些? 我的世界虚无世界2天堂传送门怎么做 我的世界天堂传送门怎么做 怎么做天堂传送门 表带脏了怎么清洗? 怎样清洗表链? pvc管怎么切光滑 那机器好像很复杂,请问如何自制? 用什么样的刀 切毛栗子的皮 自制很差怎么办?