php常量定义的方式有哪些-PHP问题

资源魔 27 0

php常量界说的形式有哪些?

正在PHP中能够经过define()以及const两种形式界说常量。

可是正在开发中咱们应该何时用define()界说常量,何时用const界说常量? 这两种形式界说常量的次要区分是甚么?

从5.3版本开端PHP有两种办法来界说常量,应用const要害字或许是应用define()办法:

const FOO = 'BAR';
define('FOO', 'BAR');

二者之间最年夜的区分正在于const是正在编译时界说常量,而define()办法是正在运转时界说常量。

const不克不及用正在if语句中, defne()能用正在if语句中。

 if(...) {
     const FOO = 'BAR';//谬误
 }
 if(...) {
     define('FOO', 'BAR');//正确
 }

define()的一个罕用场景是先判别常量能否曾经界说再界说常量:

 if(defined('FOO)) {
     define('FOO', 'BAR')
 }

const 界说常量时,值只能是动态标量(数字, 字符串, true,false, null), 而define()办法能够把恣意表白式的值用作常量的值。从PHP5.6开端const也容许把表白式用作常量的值了。

const BIT_5 = 1 << 5; //PHP5.6后支持,以前的PHP版本没有支持
define('BIT_5', 1 << 5);// 一切PHP版本都支持

const 只容许简略的常量名,而define()能够把任何表白式的值用作常量名

for ($i = 0; $i < 32; $i++) {
    define('BIT_' . $i, 1 << $i);
}

const 界说的常量常量名是巨细写敏感的,而通报true给define()办法的第三个参数时能够界说巨细写没有敏感的常量。

define('FOO', 'BAR', true);
echo FOO; //BAR
echo foo; //BAR

下面罗列的都是const相较define()而言的一些缺陷或许没有灵敏之处,上面咱们看一下为何我集体保举用const而没有是define()来界说常量(除了非要正在上述罗列的场景中界说常量)。

const 具备更好的可读性,const是言语构造而没有是函数,并且与正在类中界说类常量的方式放弃分歧。

const正在以后的定名空间中界说常量, 而define()要完成相似成果必需正在界说时通报完好的定名空间称号:

namespace A\B\C;
//To define the constant A\B\C\FOO:
const FOO = 'BAR';
define('A\B\C\FOO', 'BAR');

const从PHP5.6版本开端能够把数组用作常量值,而define()正在PHP7.0版本开端才支持把数组用作常量值。

const FOO = [1, 2, 3];// valid in PHP 5.6
define('FOO', [1, 2, 3]);// invalid in PHP 5.6, valid in PHP 7.0

由于const是言语构造而且正在编译时界说常量以是const会比define() 稍稍快一些。

家喻户晓PHP正在用define()界说了年夜量的常量后会影响效率。 人们设置创造了apc_load_constants()以及hidef来绕过define()招致的效率成绩。

最初,const还能被用于正在类以及接口中界说常量,define()只能被用于正在全局定名空间中界说常量:

class FOO
{
    const BAR = 2;// 正确
}
class Baz
{
    define('QUX', 2)// 谬误
}

总结:

除了非要正在if分支里界说常量或许是经过表白式的值来定名常量, 其余状况(即便是只是简略的为了代码的可读性)都保举用const代替define()。

保举:《PHP教程》

以上就是php常量界说的形式有哪些的具体内容,更多请存眷资源魔其它相干文章!

标签: php php教程 php故障解决 php使用问题

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