有没有办法动态创建类的常量?我知道这听起来有点奇怪,但让我解释一下我要做的事情:
>我有一个Enum类,其属性由静态const定义定义
>此类扩展了PHP SplEnum类
>而不是在代码中键入这些定义中的每一个,我希望有一个静态初始化程序转到数据库并提取枚举值
也许像这样的事情:
@H_502_7@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而是静态变量.也许我的整个想法都是头脑发达,而且有更好的技巧.无论如何,非常感谢任何实现最终目标的方法.
UPDATE
我认为对我的目标更加明确可能会有所帮助,因为我认为我对Constants的使用完全不是一个好的.基本上我想实现的是典型的枚举列表的要求:
>约束函数签名.我希望能够要求一组“值”作为函数的输入.例如:
公共函数do_something(ENUM_Types $type){}
>简单紧凑.在代码中使用时,允许使用简单紧凑的语法.例如,使用常量我可能会写一个条件语句,如:
if($my_var === ENUM_Types :: TypeA){}
>动态枚举.我希望这个枚举通过前端进行管理并存储在数据库中(我正在使用wordpress管理屏幕,以防万一有人关心).在运行时,这个“列表”应该从DB中拉出,并作为枚举(或实现上述目标的类似结构)提供给代码.
将单个“enum”值包装并实现(非静态)magic __get方法:
@H_502_7@<?PHP
class DynamicEnums {
private static $singleton;
private $enum_values;
public static function singleton() {
if (!self::$singleton) {
self::$singleton = new DynamicEnums();
}
return self::$singleton;
}
function __construct() {
$this->enum_values = array( //fetch from somewhere
'one' => 'two','buckle' => 'my shoe!',);
}
function __get($name) {
return $this->enum_values[$name]; //or throw Exception?
}
public static function values() {
return self::singleton()->enum_values; //warning... mutable!
}
}
原文链接:https://www.f2er.com/php/135097.html对于奖励积分,创建一个返回单身的(非OO)函数:
@H_502_7@function DynamicEnums() { return DynamicEnums::singleton(); }“DynamicEnums”的消费者看起来像:
@H_502_7@echo DynamicEnums::singleton()->one; echo DynamicEnums()->one; //can you feel the magic? print_r(DynamicEnums::values());[编辑]更多的枚举.