Почему Zend Framework 2 определяет целочисленные константы, такие как 1 2 4 8 16

Например:

class Boolean extends AbstractFilter
{
    const TYPE_BOOLEAN        = 1;
    const TYPE_INTEGER        = 2;
    const TYPE_FLOAT          = 4;
    const TYPE_STRING         = 8;
    const TYPE_ZERO_STRING    = 16;
    const TYPE_EMPTY_ARRAY    = 32;
    const TYPE_NULL           = 64;
    const TYPE_PHP            = 127;
    const TYPE_FALSE_STRING   = 128;
    const TYPE_LOCALIZED      = 256;
    const TYPE_ALL            = 511;

Почему не определить как 1 2 3 4 5 и определить 1 2 4 8 16?

3 ответа

Потому что вы можете использовать побитовые операции над этими числами. Каждый из них (говоря бинарно) представляет один, а остальные - нули. Таким образом, вы можете манипулировать рядом параметров в одном байте. Скажем, если вы добавите 1000 + 0100, вы получите 1100, и информация будет сохранена.

Та же логика применяется ко второму параметру json_encode, скажем json_encode($array, JSON_HEX_TAG | JSON_HEX_APOS),

Вы можете найти более подробную информацию о вашем ответе здесь

предложение по вашему вопросу why computer science use 1 2 4 8 16 и так далее.. не только Zend Framework.

Потому что вы можете ИЛИ их в своем фильтре:

TYPE_INTEGER или TYPE_FLOAT находит целые числа или числа с плавающей запятой

TYPE_ALL отдает это: все остальные значения ORed вместе.

Другие вопросы по тегам