详解PHP中const和define的区分【php教程】,const,define
在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网别的相干文章!