Тебе какая разница, какое там число? Есть константа E_WARNING, оно и в африке warning. Понятно же. А если какой чудак на букву м поменяет в следующей версии API значения констант, ты будешь свой код переписывать? 1. У константы должно быть норомальное, осмысленное имя. 2. Никого, кроме автора данного класса не должно волновать, чему эта константа равна. Единственный правильный стиль — хорошее имя константы, остальное не важно. Да чего уж мелочится: создай объект с методами опций и передавай в функцию ;-)
AlexGousev естественно, нормальное имя цитаты. Например E_ERROR; Вот пишешь ты код функции error_repporing и ставишь в ней константу const E_ERROR = 52464; потому что посчитал, что в нее должны включится 7 других констант. А потом, через полгода, решил одну убрать и этой константы, а другую - добавить (как раз в стиле разрабов пхп). Ты будешь с калькулятором сидеть и отнимать десятичные значения? Или просто посмотреть: "А какие ж константы я включил в эту константу то?". Тут вообще только полным перебором всех остальных констант получится узнать. Вот я предложил удобный стиль констант. Или это лишь бы попридираться?
TheShock Нифига не понял. Кто куда должен включаться? Зачем нужна константа, которая будет значить сразу несколько других констант, если просто можно использовать побитовое ИЛИ. А насчет чисел, так каждая константа - определенный бит. В десятичном представлении будет 2^n-1.
Про побитовое или я и говорю: PHP: <?php class ConstantsDec { const A = 1; const B = 2; const C = 4; const D = 8; const E = 16; const F = 32; const G = 64; const I = 128; const K = 256; const L = 512; // Не работает: Parse error: syntax error, unexpected '|', expecting ',' or ';' // const STANDART = self::A | self::D | self::E; // Если бы не строка выше - какие значения идут по-умолчанию? const STANDART = 25; // Вот какие значения идут тут? По доброй традиции php включено не все const FULL = 955; } class ConstantsOct { const A = 01; const B = 02; const C = 04; const D = 010; const E = 020; const F = 040; const G = 0100; const I = 0200; const K = 0400; const L = 01000; // Тут полегче сказать, правда? const STANDART = 031; const FULL = 01673; } ?> Про понятные имена констант я знаю. В error_reporting - понятные имена? Можете подставить сюда имена и значения из еррор_репортинг. Есть три константы - 16, 17, 18. Их значения: 65536, 131072, 262144 или 0200000, 0400000, 01000000 Вы решили добавить еще три константы. В какой системе счисления легче добавить еще три значения? Потом вы решили сделать константу, которая является суммой констант 1024, 4096, 65536 и 262144, или 02000, 010000, 0200000, 01000000. Какие четыре числа легче просуммировать? Или у вас есть константа 197152, или 0601040. В какой системе счисления понятней из каких констант она состоит?
TheShock, много шума из ничего. На начальном этапе для побитового сравнения Вы добавите 10 констант и парочку составных констант (те константы, значения которых зависят от других). Через год Вы добавите еще 3 константы и одну составную надо будет пересчитать: не важно в какой системе счисления они у вас будут написаны, потому что пересчет будет сделан гораздо быстрее, чем доказывать здесь, почему та или иная система счисления лучше.
Это не единственное достоинство их использованияhttps://php.ru/manual/language.oop5.constants.html(смотреть примеры)
Ну как я понял речь идёт не о таком случае, а когда константы являются неотъемлемой частью полноценного класса.
А в полноценном классе получение каких-то сложных опций выносится в отельный метод. Где уже рожаете логические объединения одиночных констант.
PHP: <?php define('E_ERROR',1); define('E_WARNING',1<<1); define('E_PARSE',1<<2); define('E_NOTICE',1<<3); define('E_CORE_ERROR',1<<4); define('E_CORE_WARNING',1<<5); define('E_COMPILE_ERROR',1<<6); define('E_COMPILE_WARNING',1<<7); define('E_USER_ERROR',1<<8); define('E_USER_WARNING',1<<9); define('E_USER_NOTICE',1<<10); define('E_STRICT',1<<11); define('E_RECOVERABLE_ERROR',1<<12); define('E_DEPRECATED',1<<13); define('E_USER_DEPRECATED',1<<14); define('E_ALL',1<<15); ?> Внезапно, еще вариант
флоппик, круто. 2 вопроса: 1. Работает ли в классе? 2. Как сделать соединенную константу? Т.е. E_ALL == E_ERROR | E_WARNING | E_STRICT
define('E_ALL', E_ERROR | E_WARNING | E_STRICT); =) Это те же цифры, просто двоичные значения задаются банально побитовым сдвигом, а не напрямую.