2

今天是个好日子。

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

例如像这样使用它 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 已打开。

所以,一切正常。但是...我敢肯定有更好的方法来做到这一点...对吗?所以,问题 - 我怎样才能让它变得更好?我确信有一种适当的方法来实现这样的东西。

4

2 回答 2

2

显然这是它应该做的方式。如果期望的结果与描述的一样,则无需以任何其他方式进行。

于 2012-05-26T10:08:46.857 回答
1

您可能希望使用数组作为$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, 
于 2012-03-23T14:38:32.607 回答