正在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
以上就是你需求留意的几点。那末如今我来讲明如下,为何没有触及以下情况下,我集体老是习气应用const:
const愈加易读、雅观。
const默许正在以后的namespace下界说常量,而应用define则需求你写明整个namespace的完好门路:
namespace A\B\C; // 假如要界说常量 A\B\C\FOO: const FOO = ‘BAR’; define(‘A\B\C\FOO’, ‘BAR’);
自从PHP5.6后,应用const数组也能被界说为常量。而define今朝是没有支持这一性能的,然而该性能会正在PHP7中被完成:
const FOO = [1, 2, 3]; // 正在PHP 5.6中无效 define(‘FOO’, [1, 2, 3]); // 正在PHP 5.6有效, 正在PHP 7.0无效
由于const正在编译时就被执行了,以是它正在速率上要比define快一点。
尤为是正在应用define界说年夜量常量时,PHP的运转速率会变患上十分慢。人们乃至创造了诸如apc_load_constantshide来防止这个成绩
与define相比,const能使界说常量的效率进步一倍(正在设置装备摆设有XDebug的开发机械上,这个差别还会更年夜)。然而正在查问工夫上,二者是不区分的(由于两者用的都是同一个查问表)
最初需求留意的一点是,const能够正在class以及interface傍边应用 ,而define是做没有到这一点的:
class Foo { const BAR = 2; // 无效 } class Baz { define('QUX', 2); // 有效 }
总结
除了非你需求应用表白式或许正在前提语句中界说常量,否则的话仅仅是为了代码的简略可读性你都最佳要应用const!
更多PHP相干常识,请拜访PHP中文网!
以上就是详解PHP中const以及define的区分的具体内容,更多请存眷资源魔其它相干文章!
标签: php开发教程 php开发资料 php开发自学 const define
抱歉,评论功能暂时关闭!