Я пытаюсь выполнить некоторую работу с разрешениями, хранящимися в целых числах, используя побитовые операторы, и застрял, пытаясь установить несколько определенных битов в 1
или 0
в одной строке.
Мой текущий код:
function setPermission(int $permissions, int $type, bool $value)
{
return ($permissions & ~$type) | /* There is what i don't know how to do */;
}
echo setPermission(2|4|16, 4|8, false); // 2|16
echo setPermission(2|4|16, 4|8, true ); // 2|4|8|16
echo setPermission(1|2|4, 4|8|16, false); // 1|2
Анализируя проблему, я выясняю, как выполнить первую часть функции и что вторая должна быть равна $ type, когда $value
равно true
и 0
когда $value
равно false
, но я не знаю, как это сделать проще всего.
Обращаю ваше внимание, что параметр $type
может быть любым целым числом, а не только степеньюдва.