PHP:检查在用户定义的函数中设置了哪些标志


PHP: checking which flags have been set in user defined function

有人可以澄清如何在用户定义的函数中检查标志吗?

这些常量是预定义的 glob 标志。

  • GLOB_BRACE
  • GLOB_MARK
  • GLOB_NOSORT
  • GLOB_NOCHECK
  • GLOB_NOESCAPE
  • GLOB_ERR
  • GLOB_ONLYDIR

我创建了一个新的只是为了测试。

define('GLOB_CUSTOM', 123);

我也试过

define('GLOB_CUSTOM',0b1111011);

结果是一样的。

此函数对传递的标志执行var_dump。

function flags_test($flags = NULL) {
    echo '$flags argument<br>';
    var_dump($flags); // int 1073746108
    echo '<br>';
    if($flags & GLOB_BRACE){ 
        echo 'FLAG : "GLOB_BRACE" is set';
        var_dump(GLOB_BRACE);
        echo '<br>';
    }
    if($flags & GLOB_MARK){ 
        echo 'FLAG : "GLOB_MARK" is set';
        var_dump(GLOB_MARK);
        echo '<br>';
    }
    if($flags & GLOB_NOSORT){ 
        echo 'FLAG : "GLOB_NOSORT" is set';
        var_dump(GLOB_NOSORT);
        echo '<br>';
    }
    if($flags & GLOB_NOCHECK){ 
        echo 'FLAG : "GLOB_NOCHECK" is set';
        var_dump(GLOB_NOCHECK);
        echo '<br>';
    }
    if($flags & GLOB_NOESCAPE){ 
        echo 'FLAG : "GLOB_NOESCAPE" is set';
        var_dump(GLOB_NOESCAPE);
        echo '<br>';
    }
    if($flags & GLOB_ERR){ 
        echo 'FLAG : "GLOB_ERR" is set';
        var_dump(GLOB_ERR);
        echo '<br>';
    }
    if($flags & GLOB_ONLYDIR){ 
        echo 'FLAG : "GLOB_ONLYDIR" is set';
        var_dump(GLOB_ONLYDIR);
        echo '<br>';
    }
    if($flags & GLOB_CUSTOM){ 
        echo 'FLAG : "GLOB_CUSTOM" is set';
        var_dump(GLOB_CUSTOM);
        echo '<br>';
    }
}

测试一个。

flags_test(GLOB_ONLYDIR); // test one

结果

$flags argument
int 168
FLAG : "GLOB_BRACE" is set
int 128
FLAG : "GLOB_MARK" is set
int 8
FLAG : "GLOB_NOSORT" is set
int 32
FLAG : "GLOB_CUSTOM" is set
int 123

测试二。

flags_test(GLOB_CUSTOM);

结果

$flags argument
int 251
FLAG : "GLOB_BRACE" is set
int 128
FLAG : "GLOB_MARK" is set
int 8
FLAG : "GLOB_NOSORT" is set
int 32
FLAG : "GLOB_NOCHECK" is set
int 16
FLAG : "GLOB_CUSTOM" is set
int 123

我有几个问题。

  • 在测试一中,为什么GLOB_CUSTOM显示为设置?
  • 在测试二中,为什么GLOB_BRACEGLOB_MARKGLOB_NOSORTGLOB_NOCHECK显示为集合?
  • var_dump($flags)的价值代表什么(这个数字从哪里来(?

如何在 php 中实现位掩码? 是我开始的地方,我从接受的答案构建我的例子。不幸的是,它没有解释上述任何一点。

编辑:

标志必须是 2 的幂才能正确按位或组合。PHP函数标志,如何?

这应该可以解决问题

define('GLOB_CUSTOM', 64);

在测试一中,为什么GLOB_CUSTOM显示为设置?

GLOB_CUSTOM定义为 123,$flags设置为 168。掩蔽结果为

$flags & GLOB_CUSTOM -> 40

而且因为你只是测试if($flags & GLOB_CUSTOM)而不是if($flags & GLOB_CUSTOM === GLOB_CUSTOM)你的函数显示错误的结果。

您最好使用开关盒。

我认为这也解决了问题 2

var_dump($flags(的值代表什么(该数字从何而来(?

如果您采用此数字的二进制表示形式,您将看到标志的所有已定义位。