有些人想过PHP Enum设置

时间:2009-12-03 14:34:34

标签: php enums set

对于我正在工作的项目,我需要拥有某种类型的enumaration类,因为数据不会被更改将数据存储在数据库中并使用不必要的请求耗尽db-server是没用的。所以在阅读了SO上的一些相关帖子后,我尝试了以下内容:

class Model_MaintenanceTerminology
{
  const SetDefault = array("id" => 1, "title" => "set 1", "levels" => array("OLM", "ILM", "DLM"));
  const SetABC     = array("id" => 2, "title" => "A, B, C", "levels" => array("A", "B", "C"));
  const SetLevel   = array("id" => 3, "title" => "Level 1, Level 2, Level 3, Level 4", "levels" => array(1, 2, 3, 4);
}

问题在于我必须构建一个动态表单,并且每个国家/地区使用的级别数量不同(某些项目相关信息)。所以我认为像上面这样的枚举类非常适合我的需要。

现在问题似乎是我不能将数组声明为常量。有人想过一个不同的,更好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果没有多少不同的值,您可以使用静态访问器方法:

class Enum
{
    static function getFirstArray()
    {
        return array(/* ... */);
    }

    static function getSecondArray()
    {
        return array(/* ... */);
    }
}

答案 1 :(得分:0)

没关系,在阅读了我自己的错字帖后,我想到了一个不同的方法得到了相同的结果。我的工作解决方案如下:或许它有朝一日可以派上用场:)

我的工作解决方案:

class Model_MaintenanceTerminology
{
  const SetDefault = 1; 
  const SetABC     = 2; 
  const SetLevel   = 3; 


  public function getSetById(Integer $id)
  {
    switch($id->value)
    {
      case 2 : return array("id" => 2, "title" => "A, B, C", "levels" => array("A", "B", "C")); break;
      case 3 : return array("id" => 3, "title" => "Level 1, Level 2, Level 3, Level 4", "levels" => array(1, 2, 3, 4); break;
      default : return array("id" => 1, "title" => "set 1", "levels" => array("OLM", "ILM", "DLM"));
    }
  }
}