У меня есть настраиваемый отчет. Для каждого поля, которое может быть включено в отчет, есть ключ (сохраненный в настройках отчета), метка, потенциально уровень доступа и дескриптор SQL - что-то вроде foo as my_foo
.
В приложении Java я бы создал класс ReportField с каждым из перечисленных выше свойств. Я бы использовал приватный конструктор и перечислил бы каждое из полей в классе следующим образом:
public final static ReportField FOO = new ReportField('foo', 'Foo', 1, 'foo as my_foo');
Я бы, вероятно, создал статический массив всех полей, добавил бы статический метод, который позволяет искать поле по ключу, и так далее. Тогда в других местах я мог написать код вроде:
List<String> selectFields = new ArrayList<String>();
for (ReportPref pref : reportPrefs) {
selectFields.add(ReportField.getByKey(pref.getField()).getFieldSql());
}
Извиняюсь за код Java, но, надеюсь, вы меня поняли.
Существует ли идиоматический способ решения той же проблемы в PHP? Я могу придумать несколько решений - вложенные ассоциативные массивы помогут, но я бы хотел избежать хакерского решения.