Двоичные флаги для функций в php - PullRequest
2 голосов
/ 23 марта 2012

Добрый день всем.

Я пытаюсь найти способ использовать несколько флагов для функции без увеличения количества аргументов.

Например, чтобы использовать его таким образом 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 включены.

Итак, все работает. Но ... я уверен, что есть лучший способ сделать это ... Это правильно? Итак, вопрос - как я могу сделать это лучше? Я уверен, что есть правильный способ реализовать такие вещи.

Ответы [ 2 ]

2 голосов
/ 26 мая 2012

Видимо, так и должно быть. Нет необходимости делать это любым другим способом, если желаемый результат соответствует описанию.

1 голос
/ 23 марта 2012

Возможно, вы захотите использовать массив для аргумента $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, 
...