•   欢迎来到21NN网.
  •   请记住本站网址www.21nn.cn

php常量定义的体式格局有哪些【php问题】,php

摘要: php常量定义的体式格局有哪些?在PHP中能够经由过程define()和const两种体式格局定义常量。但是在开辟中我们应当什么时候用define()定义常量,什么时候用const定义常量...

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常量定义的体式格局有哪些的细致内容,更多请关注ki4网别的相干文章!

分享到:

发表评论

评论列表

还没有评论,快来说点什么吧~

公众号二维码

微信公众号