详解PHP中const和define的区别-php教程

资源魔 38 0

正在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

抱歉,评论功能暂时关闭!