переопределение констант

shark_255

Новичок
переопределение констант

Так сложилось, что понадобилось переопределять константы, нашел замечательный способ :)

define('TEST', 1, true);
echo TEST;
define('TEST', 2);
echo TEST;

хотя по факту переопределять не должно.

Вопрос такого плана - как вообще хранить константные значения, чтобы потом можно было менять ?

через синглтоны ?
 

AmdY

Пью пиво
Команда форума
shark_255
Вы из битрикса?
То, что вы хотите, это уже не константы, а просто переменные доступные из любого места в коде. Такое можно реализовать с помощью. реестра, синглетона или статическими переменными класса. Мне третий вариант больше нравится, думаю так конфиги делать Config::$DBNAME
 

Dovg

Продвинутый новичок
>как вообще хранить константные значения, чтобы потом можно было менять ?
Бессмысленный вопрос, не находите?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Не стоит хотеть менять константы, так как их менять нельзя. Тебя потом найдут и покарают те, кто будут поддерживать после тебя этот твой говнокод и не смогут понять как же мать ети так вышло, что в конфиге продефайнили одно, а на деле - выходит по другому.

Простите... эмоции...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
AmdY лучше _Config - автодополнений меньше, и ясно, что это служебный класс, у меня уже года 3 так

shark_255
define('TEST', 1, true) ~= define('test', 1,false)

PHP:
define('TEST', 1, true);
define('test', 2);
Notice: Constant test already defined
 

fixxxer

К.О.
Партнер клуба
Вот надо некоторых заставить писать на ерланге :)))
 

shark_255

Новичок
на самом деле откуда ноги растут -

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

После того как прошло N времени встала задача выполнять задания из разных классов за один сеанс выполнения скрипта - вот это перезаписывание константы и вылезло )

За критику спасибо ) советы приняты к сведению )
 

melo

однажды
Математическая константа — величина, значение которой не меняется; в этом она противоположна переменной.
 

shark_255

Новичок
2Iceman - ну костыль вполне рабочий получится, все верно.

p.s. to others сколько желчи - товарищи ) вы видите то, что хотите увидеть. а в старттопике написано - "Так сложилось, что понадобилось переопределять константы.."
 

Dovg

Продвинутый новичок
shark_255
>"Так сложилось, что понадобилось переопределять константы.."
Так сложилось, что пришлось есть детей.

Какая-то этика должна быть ИМХО.
 

shark_255

Новичок
Этика возможна при наличии свободного времени под переписывание кода, а не когда у заказчика "все горит".
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
shark_255
Это не промах заказчика, это твой промах, так как не объяснил ему что и как. Не умеешь ты работать. Вообще дискуссия закрыта, тебе сказали уже несколько человек, что так делать нельзя. Это неправильно.
 

fixxxer

К.О.
Партнер клуба
Ну допустим горит.

1) global replace CONST_NAME -> CONST_NAME()

2)
PHP:
- define('CONST_NAME', 'value')
+ function CONST_NAME($set_value = null) {
+    static $value;
+    if (isset($set_value)) {
+        $value = $set_value;
+    }
+    return $value;
+ }
+ CONST_NAME('value');
3 минуты.
 

iceman

говнокодер
c0dex
это не его промах, а промах того кто писал библиотеку,
использовать КОНСТАНТУ в классе, который предположим будет использоваться как объект - это бред, должен был быть входной параметр в конструкторе для указания пути
 
Сверху