php中函数的二进制标志


Binary flags for functions in php

大家好。

我正试图找出一种方法,在不增加参数数量的情况下,为一个函数使用多个标志。

例如,使用some_func(flag1|flag2|flag3);

现在我做得像

define('flag1', 1);
define('flag2', 2);
define('flag3', 4);
function flagtest($flags)
{
if ($flags & flag1)
    echo 'flag1 is on, '; 
if ($flags & flag2)
    echo 'flag2 is on, '; 
if ($flags & flag3)
    echo 'flag3 is on, '; 
}
flagtest(flag2 | flag3);

然后它弹出2号和3号旗。

所以,一切都在运转。但是我相信有更好的方法…对吗?那么,问题是——我该如何让它变得更好呢?我相信有一个合适的方法来实现这样的东西。

显然这是应该做的。如果期望的结果如所述,就没有必要以任何其他方式进行。

您可能需要为$flags参数使用一个数组,如下所示:

function flagtest($flags = false)
{
    if (is_array($flags)
    {
        foreach ($flags as $index => $value)
        {
            if ($value == true) echo "flag $index is on'n";
        } 
    }
}
$my_flags = array(true, true, false);
flagtest($my_flags); // -> flag1 is on, flag2 is on,