【发布时间】:2013-05-20 21:31:51
【问题描述】:
我在某个过程中收到一个对象,这个对象需要弄清楚它的配色方案。 例如,我有一个这样存储的配色方案:
class FirstScheme {
public static $COLORS = array('1' => 'green', '2' => 'red', ...);
}
class SecondScheme {
public static $COLORS = array('1' => 'red', '2' => 'green', ...);
}
我事先知道所有的配色方案名称;它们只能在代码更改时更改。 但是每个对象要使用的着色方案需要在运行时通过匹配该对象的属性来确定。
我不知道该怎么办。在 python 中,我会定义一个 dict,其中包含颜色方案到名称的映射,如下所示:
d = {'attr_value1': FirstScheme, 'attr_value2': SecondScheme, 'attr_value3': FirstScheme, ...}
然后只需访问“颜色”变量,因为每个类都应该有它。但是在 PHP 中没有办法以这种方式引用一个类,那么正确的方法是什么? 请注意,多个属性可以映射到相同的着色方案。
【问题讨论】:
-
如果你传递对象而不是类怎么办?静态方法/属性通常被认为是一种不好的做法。在对象的情况下 - 你将有一个单一的类
ColorScheme并用不同的方案实例化它。 -
为什么?我不明白当我的配色方案是预先确定的时,为什么我需要一个对象。我不需要实例化它们,我提前知道它们。
-
它们是预定的事实如何改变静态解决方案很糟糕的事实?创建一个构建器,根据请求创建各种配色方案,并通过接口绑定您的类,而不是通过硬编码的类和属性名称
-
@dragoon
Coloring scheme is need to be determined at run-time by matching the attribute of this object你能再解释一下吗? -
@hek2mgl 当然,我知道所有可能的配色方案,但我将来可能会添加更多。每个传入对象都有一些属性,允许明确映射到其中一个方案。
标签: php class-reference