define('MENU_IS_ROOT',0x0001)和define('MENU_IS_ROOT',1)有什么区别?

时间:2012-12-27 07:09:54

标签: php drupal

在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?

4 个答案:

答案 0 :(得分:3)

适用于bitwise operations

您可以这样做:

<?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