Некоторые подумали об установке PHP Enum - PullRequest
0 голосов
/ 03 декабря 2009

Для проекта, в котором я работаю, мне нужен какой-то класс перечисления, поскольку данные не будут изменены. Бесполезно хранить их в базе данных и исчерпывать db-сервер ненужным запросом. Поэтому после прочтения некоторых связанных постов на 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 ]

1 голос
/ 03 декабря 2009

Если не так много разных значений, вы можете просто использовать статические методы доступа:

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

    static function getSecondArray()
    {
        return array(/* ... */);
    }
}
0 голосов
/ 03 декабря 2009

Не берите в голову, после прочтения моего собственного поста для опечаток я думал о другом подходе, получающем тот же самый результат. Мое рабочее решение ниже, может быть, оно кому-нибудь пригодится:)

Мой рабочий раствор:

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"));
    }
  }
}
...