Целочисленная конфигурация PHP (например, 1 = apache, 2 = php, 3 = apache + php) - PullRequest
0 голосов
/ 18 июля 2010

Как можно проанализировать значение конфигурации с помощью PHP, который представляет собой число и общее количество других чисел.

Один из примеров этого:

1 -> Ведение журнала включено
2-> Отчет об ошибках включен
4 -> Отчет по электронной почте включен

3 -> Ведение журнала + Ошибка включена
5 -> Ведение журнала + Электронная почта включена

1 Ответ

3 голосов
/ 18 июля 2010

У вас не просто сумма - у вас есть набор флагов или битовое поле, каждый из которых представлен одним битом.

$logging     = !!($cfgval & 1);
$errorReport = !!($cfgval & 2);
$emailReport = !!($cfgval & 4);

"!!" просто гарантирует, что числа, которые не равны 0 (т. е. числа с заданным битом), в конечном итоге будут иметь то же «истинное» значение, которое использует остальная часть PHP, поэтому такие вещи, как ($logging == true), всегда работают как положено. Это не обязательно, но я настоятельно рекомендую как-то преобразовать значение в логическое значение; (bool) также будет работать, даже если в 3 раза больше символов. :)

Пока вы сохраняете числа в виде степеней двух (1, 2, 4, 8, 16, 32 ...), легко расширить это до 31-32 различных флагов (целые числа имеют размер 32 бита). , но верхний бит является знаковым битом, который выглядит довольно забавно, если вы не знаете о математике "два дополнения").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...