【发布时间】:2012-08-24 16:56:58
【问题描述】:
有没有办法动态创建类的常量?我知道这听起来有点奇怪,但让我解释一下我想要做什么:
- 我有一个 Enum 类,其属性由静态
const定义定义 - 这个类扩展了 PHP SplEnum 类
- 我不想在代码中输入每个定义,而是让静态初始化程序进入数据库并提取枚举值
可能是这样的:
class myEnum extends SplEnum {
public static function init () {
$myNameValuePair = DB_Functions::get_enum_list();
foreach ( $myNameValuePair as $name => $value) {
$const = array ( self , $name );
$const = $value;
}
}
}
我认识到这实际上不起作用,因为它没有设置 CONST 而是设置静态变量。也许我的整个想法都是胡思乱想,并且有更好的技术。无论如何,非常感谢任何实现最终目标的方法。
更新
我认为更明确我的目标可能会有所帮助,因为我认为完全有可能我对常量的使用不是一个好方法。基本上我想要实现的是典型的枚举列表的要求:
-
约束函数签名。我希望能够请求一组值作为函数的输入。例如:
公共函数 do_something (ENUM_Types $type) {}
-
简单紧凑。在代码中使用时允许使用简单而紧凑的语法。例如,使用常量我可能会写一个条件语句,例如:
如果($my_var === ENUM_Types::TypeA){}
动态枚举。我希望通过前端管理这个枚举并存储在数据库中(我正在使用 wordpress 管理屏幕,以防万一有人关心)。在运行时,应该将这个“列表”从数据库中提取出来,并作为枚举(或实现上述目标的类似结构)提供给代码。
【问题讨论】:
-
根据定义,常量不能是动态的。为什么不只使用静态变量?
-
嗯,是的,我知道,这就是为什么我说它“可能看起来有点奇怪”。我会稍微更新一下这个问题,以更清楚地说明我想要实现的目标。
-
换句话说......你不想要动态常量,你想要动态枚举。
-
使用一个充当注册表的类怎么样?
-
我刚看了标题就想“wtf?” O_o
标签: php