Php 什么';定义(';MENU是#ROOT';,0x0001)和定义(';MENU是#ROOT';,1)之间的区别是什么?

Php 什么';定义(';MENU是#ROOT';,0x0001)和定义(';MENU是#ROOT';,1)之间的区别是什么?,php,drupal,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 |

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

在面包屑屑=16中是否等同于菜单\u建议的\u项目=菜单\u可见?

好的,结果是相同的。

我认为这只是个人喜好的问题

十六进制常数通常用于位掩码。定义所有值时,可以轻松查看位模式关系

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

这是为了

您可以这样做:

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

为什么不
define('MENU_是_ROOT',1)
而不是
define('MENU_是_ROOT',0x001)

这些是相同的;有些人喜欢十六进制值的概念

define('MENU_-suggered_-ITEM',MENU-VISIBLE_-IN_-BREADCRUMB | 0x0010)与定义相同('菜单建议项',16)

否,
0x0004 | 0x0010
相当于
4 | 16
,它等于
20
。查看二进制中的值时,更容易理解二进制或(
|
)运算符:

0x0004 = 00000100
0x0010 = 00010000
         -------- OR
         00010100 = 0x0014 = 20

你的代码很容易理解。thx非常感谢给我这个问题的答案。你不必用
0x
格式定义数字来执行位运算。第一个问题不是建设性的,但第二个问题有明确的答案。投票重新打开。您在“0x0010=00001010”中有错误。应改为“0x0010=00010000”。