Я получаю объект во время некоторого процесса, и этот объект должен выяснить его схему раскраски. Например, у меня есть схемы окраски, которая хранится так:Ссылка на класс программно в PHP
class FirstScheme {
public static $COLORS = array('1' => 'green', '2' => 'red', ...);
}
class SecondScheme {
public static $COLORS = array('1' => 'red', '2' => 'green', ...);
}
Я знаю, что все имена схем раскраски заранее; они могут меняться только при изменении кода. Но схему раскраски, которая будет использоваться для каждого объекта, должна определяться во время выполнения путем сопоставления атрибута этого объекта.
И здесь я не знаю, что делать. В питона я определил бы ДИКТ проведение сопоставления цветовых схем с именами, как это:
d = {'attr_value1': FirstScheme, 'attr_value2': SecondScheme, 'attr_value3': FirstScheme, ...}
А затем просто получить доступ к переменной «Colors», потому что каждый класс должен иметь. Но в PHP нет способа ссылки на класс таким образом, так что это правильный способ сделать это? Обратите внимание, что более одного атрибута можно сопоставить с той же схемой раскраски.
Что делать, если вы передаете объекты, а не классы? Статические методы/свойства обычно считаются плохой практикой. В случае объектов - у вас будет один класс «ColorScheme» и создайте его с помощью разных схем. – zerkms
Почему? Я не понимаю, зачем мне нужен объект, когда мои схемы окраски заранее определены. Мне не нужно создавать их, я знаю их заранее. – dragoon
как факт, что они предопределены, изменяет тот факт, что решение со статикой отстойно? Создайте построитель, который создает различные цветовые схемы по запросу и связывает ваши классы по интерфейсам, а не по жестко закодированным именам классов и свойств. – zerkms