@AndryG

Best practice по константам проекта в PHP. Нормально ли собрать в файл все константы (100-200 шт) проекта?

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

Генерирую объект суммы денежки.

$money = \g::bank()->money(\cy::USD, 150);

Во внутрях g::bank()->money() класс cy ("справочник валюты") активно используется. И мне приходится о нем помнить и упоминать при создании суммы.

Вот в таких случаях хочется глобальную константу CY_USD. Я понимаю слова про модульность, независимость и т.п., но так задолбало импортировать классы лишь ради констант.

Можно вот так запилить. Тогда внешний код может юзать упрощенный варианты, а внутренний код модуля сохранит "кучность":
const CY_USD = \cy::USD;
const BTL_T_CREDENZA = \Battle::TYPE_CREDENZA;
const ADVT_FULL  = \thing\advanced\Manager::MASK_FULL;


Еще пример. В драйвер БД встроена примочка для вставки констант и для неё приходится писать полный путь
...
   and b.type = #holiday\Cherry::B_TYPE -- код находится в классе Cherry, но один фиг укажи полное имя класса
   and b.win in(1, 2)
   and b.starttime >= :a


Вот и решил я собрать все константы в один файл. Интересует вопрос производительности, ресурсов и т.п. - не сильно ли я напрягу интерпретатор, если соберу все константы в один файл (opcache используется) ?

Если у вас есть подобный велосипед, например, по сбору констант с кучи файликов в один файл буду признателен :)

___
P.S.
Раз возмущения лишь каноничного характера, то можно попробовать :)
  • Вопрос задан
  • 372 просмотра
Пригласить эксперта
Ответы на вопрос 3
rpsv
@rpsv
делай либо хорошо, либо никак
Мне кажется структура проекта должна быть удобным для работы с ним, и основное условие это модульность и разделение обязанностей. И в плане производительности подключить один класс со всеми константами, наверное будет не намного производительнее чем пару классов с константами (и немного странно что константа используется без самого класса, ну то есть если используется константа для работы с БД, то логично было бы расположить ее в маппере который с БД и работает). Как вариант можно вынести общие константы, которые используют несколько модулей. А остальные оставить в используемых классах.
Ответ написан
dmitriylanets
@dmitriylanets
веб-разработчик
В драйвер БД встроена примочка для вставки констант и для неё приходится писать полный путь

смотрите. при условии что драйвер для работы БД не может нормально работать с алиасами классов , вы пытаетесь подстроить архитектуру, а не исправить драйвер.
Понимаете в чем дело , библиотеки которые вы используете формируют вашу архитектуру, библиотеки уйдут, заменятся другими, а архитектура останется.
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Чтобы было понятно, вопрос звучит примерно так: "колеса у машины с разных сторон прикручены, и когда меняешь зимнюю резину то ходить вокруг приходится. Можно все колеса с одной стороны сделать?"

Вот ей-богу, некоторые вопросы здесь на тостере заставляют поверить что программирование для некторых - это такой культ, сродни религиозному. Состоит из обрядов. "Вот здесь мы так в бубен постучим, а здесь вот так идолу поклонимся. А можно этому идолу не влево кланяться, а вправо?"

У каждого действия в программе есть смысл. В частности, у констант классов. Если вы не понимаете, зачем вам константы классов, то не надо их вообще использовать. Ели вам не нужна машина то используйте самокат у него все колёса по одной стороне. Сделайте глобальные константы, положите в свой вожделенный единый файл и кушайте своё спагетти.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы