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またはdefineを使用する方がよい場合を知ることができます。

于 2012-12-27T07:28:38.387 に答える
1

16進定数は、ビットマスクによく使用されます。すべての値を定義すると、ビットパターンの関係を簡単に確認できます。

結果の値は同じで、コードが読みやすくなります。

于 2012-12-27T07:28:03.157 に答える
0

なぜdefine('MENU_IS_ROOT', 1)代わりにdefine('MENU_IS_ROOT', 0x001)

それらは同一です。一部の人々は、16 進値の考え方が好きです。

define('MENU_SUGGESTED_ITEM', MENU_VISIBLE_IN_BREADCRUMB | 0x0010);と同じですかdefine('MENU_SUGGESTED_ITEM', 16);

いいえ、0x0004 | 0x00104 | 16which equals と同等です20|バイナリの値を見ると、バイナリまたは ( ) 演算子を理解しやすくなります。

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

私の知る限り、結果は同じです。
あくまでも個人の好みの問題だと思います!

于 2012-12-27T07:18:39.477 に答える