константы класса

craz

Нестандартное звание
у меня константы в ini файле лежат
PHP:
constants.STATUS_REGISTER = 'registered'
constants.STATUS_ACTIVE   = 'active';
constants.STATUS_BLOCKED  = 'blocked';
constants.STATUS_REMOVED  = 'removed';

constants.ROLE_GUEST = 'guest'
constants.ROLE_USER  = 'user'
constants.ROLE_ADMIN = 'admin'
, забираю их
PHP:
        foreach ($this->getOption('constants') as $key=>$value){
            if(!defined($key)){
                define($key, $value);
            }
        }
Доступны для всего приложения получаются.

В классе как бы они доступны и так, но тест их не видит потому, что он не грузит бутстрап

PHP:
<?
class Model_User extends Zend_Db_Table_Row_Abstract{
    //put your code here
    const STATUS_REGISTER = STATUS_REGISTER;
    const STATUS_ACTIVE   = STATUS_ACTIVE;
    const STATUS_BLOCKED  = STATUS_BLOCKED;
    const STATUS_REMOVED  = STATUS_REMOVED;

    const ROLE_GUEST = ROLE_GUEST;
    const ROLE_USER  = ROLE_USER;
    const ROLE_ADMIN = ROLE_ADMIN;
}
?>
Думаю делать так, не правильно?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Можно глупый вопрос - зачем иметь константы, которые имеют строковое значение?
 

craz

Нестандартное звание
а какое они должны иметь значение? У Шевчука надо бы спросить...

Как в ini файле хранить какие либо другие значения? Для использования Zend_Config_Ini

Походу реально глупый вопрос вы задали...
 

флоппик

promotor fidei
Команда форума
Партнер клуба
В моем понимании, константы, это такие «магические» строки, которые придают семантический смысл цифровым константам. Цифровые константы нужны для удобства операций над ними, бинарных, арифметических. Особенно это актуально в языках без динамической типизации. Строка же сама по себе обладает семантическим смыслом, зачем их дублировать?
Единственный смысл я вижу в авто-дополнении в IDE. Но тогда тоже не понятно, зачем пользоваться строковыми значениями в этих константах.
 

craz

Нестандартное звание
никакого отличия строка - число не вижу. Что число будешь писать везде вместо константы, нафик иметь такую константу: const MAX_USERNAME_LENGTH = 32; лучше ж писать 32 везде... что строку так же..

Имхо не относится к вопросу, и по сути флуд.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
никакого отличия строка - число не вижу. Что число будешь писать везде вместо константы, нафик иметь такую константу: const MAX_USERNAME_LENGTH = 32; лучше ж писать 32 везде... что строку так же..

Имхо не относится к вопросу, и по сути флуд.
Ты не прав. Числовое значение может изменится. Семантическое же - не изменится. Хороший пример - константа E_ALL в пхп, которая меняла свое значение много раз (с появлением новых уровней сообщений об ошибках), не меняя семантики.
 

craz

Нестандартное звание
Окей, допустим я согласен) а теперь по теме есть что сказать?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
По теме - почему константы грузятся из конфига (предполагая их вариативность)? либо если это не константы по сути - почему бы их не сделать обычными переменными?
 

Духовность™

Продвинутый новичок
const STATUS_REGISTER = STATUS_REGISTER;
const STATUS_ACTIVE = STATUS_ACTIVE;
const STATUS_BLOCKED = STATUS_BLOCKED;
const STATUS_REMOVED = STATUS_REMOVED;

const ROLE_GUEST = ROLE_GUEST;
const ROLE_USER = ROLE_USER;
const ROLE_ADMIN = ROLE_ADMIN;
ППЦ! Govnokod detected

почему нельзя объявить эти константы напрямую в классах? зачем данные, относящиеся к классу, к программе, выделять в какой-то мутный файл конфигурации?

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

Все эти параметры 'guest', 'user', 'admin' должны быть объявлены в классе.
 

A1x

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

Духовность™

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

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

craz

Нестандартное звание
так с одной стороны

триум 1) как раз чтоб юзать класс в других местах надо писать в нем

с другой стороны

А1х 2) вдруг они еще где то понадобятся в приложении чтобы не искать и не менять везде можно выделить их в конфиг...

флоппик 3)ваще не в теме, почему то думает что константы можно менять, хм....

Ну чтож я думаю мне достаточно этих двух мнений, что бы сделать вывод

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

craz

Нестандартное звание
const STATUS_REGISTER = STATUS_REGISTER;
const STATUS_ACTIVE = STATUS_ACTIVE;
const STATUS_BLOCKED = STATUS_BLOCKED;
const STATUS_REMOVED = STATUS_REMOVED;

const ROLE_GUEST = ROLE_GUEST;
const ROLE_USER = ROLE_USER;
const ROLE_ADMIN = ROLE_ADMIN;
А забыл спросить на будущее переписать, как нибудь не гавнокоднее можно? сетеры или что нить такое..
 

Вурдалак

Продвинутый новичок
Взять и переписать. В одном классе. Остальные определять такие же константы не должны, а должны обращаться к константам первого класса.
 

Духовность™

Продвинутый новичок
ты путаешь члены класса и конфигурацию приложения.

ключевые слова 'guest', 'user', 'admin' и т.д. - это элементы предметной области. это то, что не меняется без переписи кода класса. это все должно быть зашито в коде класса. конфиги нужны вообще для другого - для хранения частных настроек, когда проект нужно перенести с одного сервера на другой и быстро поменять пути и параметры подключения к БД, например.
 

AmdY

Пью пиво
Команда форума
craz
а ты на основании ини файла генерируй файл с константами
проверяешь изменился ли, если нужно перегенерация файла затем инклуд его require 'constants.php'; соответственно даже автокомплитер будет знать.
 

craz

Нестандартное звание
craz
а ты на основании ини файла генерируй файл с константами
проверяешь изменился ли, если нужно перегенерация файла затем инклуд его require 'constants.php'; соответственно даже автокомплитер будет знать.
хм самый дельный совет наверное из всего топика..., но не в этом конкретном случае спасиб, большое за совет.

в данном случае верно следующее
triumvirat написал(а):
ты путаешь члены класса и конфигурацию приложения.
И я не путаю я просто подумал как бы из ini файла брать константы)) попался на вид этот класс с ним и поигрался), но чувствовал что чето не то.
 

Духовность™

Продвинутый новичок
хм самый дельный совет наверное из всего топика...,
на редкость дурацкий совет

И я не путаю я просто подумал как бы из ini файла брать константы))
в ини-файлов не должно быть КОНСТАНТ. константы объявляются в классах.
 

С.

Продвинутый новичок
craz, может ты определишься, ты закрыть константы "для всего приложения" хочешь или "вдруг они еще где то понадобятся в приложении". Твой вопрос сам решится, когда пристанешь к какому-либо краю проруби.
 
Сверху