PHP中的动态常量?

前端之家收集整理的这篇文章主要介绍了PHP中的动态常量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法动态创建类的常量?我知道这听起来有点奇怪,但让我解释一下我要做的事情:

>我有一个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而是静态变量.也许我的整个想法都是头脑发达,而且有更好的技巧.无论如何,非常感谢任何实现最终目标的方法.

UPDATE

我认为对我的目标更加明确可能会有所帮助,因为我认为我对Constants的使用完全不是一个好的.基本上我想实现的是典型的枚举列表的要求:

>约束函数签名.我希望能够要求一组“值”作为函数的输入.例如:

公共函数do_something(ENUM_Types $type){}
>简单紧凑.在代码中使用时,允许使用简单紧凑的语法.例如,使用常量我可能会写一个条件语句,如:

if($my_var === ENUM_Types :: TypeA){}
>动态枚举.我希望这个枚举通过前端进行管理并存储在数据库中(我正在使用wordpress管理屏幕,以防万一有人关心).在运行时,这个“列表”应该从DB中拉出,并作为枚举(或实现上述目标的类似结构)提供给代码.

将单个“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());

[编辑]更多的枚举.

原文链接:https://www.f2er.com/php/135097.html

猜你在找的PHP相关文章