Например:
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?
Потому что вы можете использовать побитовое операции над этими номерами. Каждый из них (бинарный говорящий) представляет один, а остальные — нули. Таким образом, вы можете манипулировать рядом параметров в одном байте. Скажем, если вы добавите 1000 + 0100, вы получите 1100, и информация будет сохранена.
Та же логика применяется ко второму параметру json_encode, скажем json_encode($array, JSON_HEX_TAG | JSON_HEX_APOS)
,
Потому что вы можете ИЛИ их в своем фильтре:
TYPE_INTEGER или TYPE_FLOAT находит целые числа или числа с плавающей точкой
TYPE_ALL отдает это: все остальные значения ORed вместе.
Вы можете найти более подробную информацию о вашем ответе Вот
предложение по вашему вопросу why computer science use 1 2 4 8 16
и так далее .. не только Zend Framework.