当前位置:首页 > PHP教程 > 正文内容

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

搜教程4年前 (2019-12-19)PHP教程162

在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网别的相干文章!

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/16653.html

标签: constdefine
分享给朋友:

“详解PHP中const和define的区分【php教程】,const,define” 的相关文章

foreach用法是什么?【php教程】,foreach用法

foreach用法是什么?【php教程】,foreach用法

与任何其他言语一样,PHP中的轮回用于屡次实行语句或语句块,直到且除非满足特定条件。这能够协助用户节约屡次编写雷同代码的时候和精神。 foreach轮回:此轮回用于遍历数组。关于轮回中的每一个计数器,都邑分派一个数组元素,并将下一个计数器移动到下一个元素。(引荐:PHP教程) 语法:...

java与php的区分是什么【php教程】,java,php

java与php的区分是什么【php教程】,java,php

java与PHP都是编程言语,运用也非常普遍。那末java和php之间有什么区分?下面本篇文章就来带人人相识一下java和php之间的区分,愿望对人人有所协助。 java的简朴引见 Java是一种通用的面向对象编程言语,旨在生成可在任何地方运用雷同代码的代码。这类编程言语是基于类的,面向...

如何用PHP在web浏览器中翻开PDF文件?【php教程】,PHP,浏览器,PDF文件

如何用PHP在web浏览器中翻开PDF文件?【php教程】,PHP,浏览器,PDF文件

PHP运用规范代码在web浏览器中显现pdf文件。显现pdf文件的历程涉及到pdf文件在服务器上的位置,它运用各种范例的头文件以范例、设置、传输编码等情势定义内容构成。 PHP通报PDF文件以在浏览器上读取它。浏览器要么显现它,要么从localhost服务器下载它,然后显现pdf。 注重:P...

wordpress的excerpt()函数的用法示例【php教程】,wordpress

本篇文章给人人带来的内容是关于wordpress的excerpt()函数的用法示例,有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。 题目:在wordpres中的single页面,自身援用的<?php the_excerpt(); ?>,然则在页面上显现的倒是文章的内...

php哈希表及数组的引见(附代码)【php教程】,php

php哈希表及数组的引见(附代码)【php教程】,php

本篇文章给人人带来的内容是关于php哈希表及数组的引见(附代码),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。 数组是PHPer最经常运用的数据范例,同时php轻易上手也得益于其壮大的数组,然则数组在php中是怎样完成的呢? 起首,我们照样先了解下相干的数据构造,为下面的内...

用PHP完成遍历删除目次及此目次下寄存的一切文件【php教程】,PHP,删除目录.删除文件

本篇文章重要报告的是运用PHP遍历一个目次下的一切目次及文件,并删除该目次及其目次下的一切子目次和文件,本次代码经由过程递归的体式格局来完成,感兴趣的朋侪来相识一下吧。 用到的函数: scandir($path) 遍历一个目次下一切文件并返回数组。unlink($filename) 删...