php const define_PHP中的define和const比较

本文摘译整理自PHP最佳编程实践——PHP中define() VS const

使用 define(),除非考虑到可读性、类常量、或关注微优化

习惯上,在 PHP 中是使用 define() 函数来定义常量。 但从某个时候开始,PHP 中也能够使用 const 关键字来声明常量了。 那么当定义常量时,该使用哪种方式呢?

答案在于这两种方法之间的区别。

define() 在执行期定义常量,而 const 在编译期定义常量。这样 const 就有轻微的速度优势, 但不值得考虑这个问题,除非你在构建大规模的软件。

define() 将常量放入全局作用域,虽然你可以在常量名中包含命名空间。 这意味着你不能使用 define() 定义类常量。

define() 允许你在常量名和常量值中使用表达式,而 const 则都不允许。 这使得 define() 更加灵活。

define() 可以在 if() 代码块中调用,但 const 不行。

示例

// 来看看这两种方法如何处理 namespaces

namespace MiddleEarth\Creatures\Dwarves;

const GIMLI_ID = 1;

define('MiddleEarth\Creatures\Elves\LEGOLAS_ID', 2);

echo(\MiddleEarth\Creatures\Dwarves\GIMLI_ID); // 1

echo(\MiddleEarth\Creatures\Elves\LEGOLAS_ID); // 2; 注意:我们使用了 define()

// Now let's declare some bit-shifted constants representing ways to enter Mordor.

define('TRANSPORT_METHOD_SNEAKING', 1 << 0); // OK!

const TRANSPORT_METHOD_WALKING = 1 << 1; //Compile error! const can't use expressions as values

// 接下来, 条件常量。

define('HOBBITS_FRODO_ID', 1);

if($isGoingToMordor){

define('TRANSPORT_METHOD', TRANSPORT_METHOD_SNEAKING); // OK!

const PARTY_LEADER_ID = HOBBITS_FRODO_ID // 编译错误: const 不能用于 if 块中

}

// 最后, 类常量

class OneRing{

const MELTING_POINT_DEGREES = 1000000; // OK!

define('SHOW_ELVISH_DEGREES', 200); // 编译错误: 在类内不能使用 define()

}

?>

因为 define() 更加灵活,你应该使用它以避免一些令人头疼的事情,除非你明确地需要类常量。 使用 const 通常会产生更加可读的代码,但是以牺牲灵活性为代价的。

无论你选择哪一种,请保持一致。

进一步阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值