hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - PHP教程 - 正文 请牢记本站网址www.sosophp.cn

详解PHP中const和define的区分【php教程】

2019-12-19PHP教程搜搜PHP网40°c
A+ A-

在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相干学问,请接见ki4网!

以上就是详解PHP中const和define的区分的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
详解PHP中const和define的区分【php教程】

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签: