在drupal | menu.inc中,我发现常量是用十六进制定义的:
define('MENU_IS_ROOT', 0x0001)
为什么不
define('MENU_IS_ROOT', 1)
==================================
还有另一个代码段:
define('MENU_VISIBLE_IN_BREADCRUMB', 0x0004);
define('MENU_SUGGESTED_ITEM', MENU_VISIBLE_IN_BREADCRUMB | 0x0010);
是否相等MENU_SUGGESTED_ITEM = MENU_VISIBLE_IN_BREADCRUMB = 16?
答案 0 :(得分:3)
您可以这样做:
<?php
define("FLAG_ONE", 0x0001);
define("FLAG_TWO", 0x0002);
define("FLAG_THREE", 0x0004);
define("FLAG_FOUR", 0x0008);
define("FLAG_ALL", FLAG_ONE|FLAG_TWO|FLAG_THREE|FLAG_FOUR);
function make_waffles()
{
echo 'Yummy! We Love Waffles!!!';
}
function do_something($flags)
{
if ($flags & FLAG_TWO)
make_waffles();
}
$flags |= FLAG_TWO;
do_something($flags);
?>
顺便说一下,您可以查看answer以了解何时使用const或define更好。
答案 1 :(得分:1)
十六进制常量通常用于位掩码。当您定义所有值时,可以轻松查看位模式关系。
结果值相同,只是使代码更容易阅读。
答案 2 :(得分:0)
AFAIK,结果是一样的。
我认为这只是个人偏好的问题!
答案 3 :(得分:0)
为什么不
define('MENU_IS_ROOT', 1)
代替define('MENU_IS_ROOT', 0x001)
?
那些是相同的;有些人就像十六进制值的想法一样。
define('MENU_SUGGESTED_ITEM', MENU_VISIBLE_IN_BREADCRUMB | 0x0010);
与define('MENU_SUGGESTED_ITEM', 16);
相同吗?
不,0x0004 | 0x0010
相当于4 | 16
,等于20
。当您查看二进制中的值时,更容易理解二进制或(|
)运算符:
0x0004 = 00000100
0x0010 = 00010000
-------- OR
00010100 = 0x0014 = 20