2009-12-03 3 views
0

Pour un projet, je dois avoir une sorte de classe d'énumération car les données ne seront pas changées Il est inutile de le stocker dans une base de données et d'épuiser le serveur db demande. Donc, après avoir lu quelques messages sur connexes SO j'ai essayé les suivantes:Quelques réflexions sur une configuration PHP Enum

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

Le problème est que je dois construire une forme dynamique et la quantité de niveaux utilisés par pays différents (certaines informations liées à des projets). J'ai donc pensé qu'une classe d'enum comme ci-dessus correspondrait parfaitement à mes besoins.

Maintenant le problème semble que je ne peux pas déclarer des tableaux comme des constantes. Quelqu'un a des idées sur une approche différente et meilleure?

Répondre

0

Ne me dérange pas, après avoir lu mon propre post pour typo, j'ai pensé à une approche différente pour obtenir le même résultat. Ma solution de travail est inférieure à, peut-être il est très pratique pour quelqu'un un jour :)

Ma solution de travail:

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

S'il n'y a pas beaucoup de valeurs différentes, vous pouvez simplement utiliser des méthodes accesseurs statiques:

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

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

Bonne réponse, +1, en effet il n'y en a pas beaucoup. Je m'en souviendrai :) – Ben

Questions connexes