3

在 drupal|menu.inc 中,我发现常量是在 Hexadecimal 中定义的:

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?

4

4 回答 4

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);

?>

顺便说一句,您可以检查此答案以了解何时使用 const 或定义更好。

于 2012-12-27T07:28:38.387 回答
1

十六进制常量通常用于位掩码。当您定义所有值时,可以很容易地查看位模式关系。

结果值是相同的,它只是使代码更易于阅读。

于 2012-12-27T07:28:03.157 回答
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 | 16which equals 20|当您查看二进制中的值时,更容易理解二进制或 ( ) 运算符:

0x0004 = 00000100
0x0010 = 00010000
         -------- OR
         00010100 = 0x0014 = 20
于 2012-12-27T09:43:04.057 回答
0

AFAIK,结果是一样的。
我认为这只是个人喜好问题!

于 2012-12-27T07:18:39.477 回答