PHP中的动态常量?
有没有办法动态创建类的常量?我知道这听起来有点奇怪,但让我解释一下我要做的事情:
>我有一个Enum类,其属性由静态const定义定义 也许像这样的事情: 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){}
将单个“enum”值包装并实现(非静态)magic __get方法:
<?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! } } 对于奖励积分,创建一个返回单身的(非OO)函数: function DynamicEnums() { return DynamicEnums::singleton(); } “DynamicEnums”的消费者看起来像: echo DynamicEnums::singleton()->one; echo DynamicEnums()->one; //can you feel the magic? print_r(DynamicEnums::values()); [编辑]更多的枚举. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |