• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

PHP中的define和const比较

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

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

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

  1. define() 在执行期定义常量,而 const 在编译期定义常量。这样 const 就有轻微的速度优势, 但不值得考虑这个问题,除非你在构建大规模的软件。
  2. define() 将常量放入全局作用域,虽然你可以在常量名中包含命名空间。 这意味着你不能使用 define() 定义类常量。
  3. define() 允许你在常量名和常量值中使用表达式,而 const 则都不允许。 这使得 define() 更加灵活。
  4. define() 可以在 if() 代码块中调用,但 const 不行。

示例

<?php
// 来看看这两种方法如何处理 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 通常会产生更加可读的代码,但是以牺牲灵活性为代价的。

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

进一步阅读

  • Stack Overflow: define() vs. const
  • PHP 手册:常量
  • Stack Overflow: define() vs. 变量


鲜花

握手

雷人

路过

鸡蛋
专题导读
上一篇:
Go语言教程:环境变量发布时间:2022-05-14
下一篇:
PHP中的UTF-8编码问题发布时间:2022-05-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap