Php 什么';定义(';MENU是#ROOT';,0x0001)和定义(';MENU是#ROOT';,1)之间的区别是什么?
在drupal | menu.inc中,我发现常量是用十六进制定义的: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 |
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”。