Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Enumeracje
Forum PHP.pl > Forum > PHP
nasty
Czesc,
Mam dylemat podczas pisania niektorych programow w php, otorz, w php niema "enum", -> enumeracje, kture pozawalaja dla okreslonej zmiennej przypiac tylko kilka mozliwych wartosci...

czy jest jakis zamiennik to enum?
siemakuba
ja ten problem rozwiązywałem tak:

  1. <?php
  2. define('ENUM_VALS', 'value1,value2,value3');
  3. $enum = explode(',', ENUM_VALS);
  4.  
  5. if (in_array('value1', $enum))
  6. {
  7. }
  8.  
  9. // albo krócej:
  10.  
  11. if(in_array('value1', explode(',',ENUM_VALS)))
  12. {
  13. }
  14. ?>


nie musi to być oczywiście stała, ale skoro wartości mają być z góry określone i niemodyfikowalne w czasie pracy skryptu to chyba dobry pomysł. Może to być też od razu tablica, zależy jak trzymasz dane konfiguracyjne.

pozdr.
dr_bonzo
Stworz sobie klase Enumeracja i po sprawie.

Tak mi sie pomysl spodobale ze nabazgralem szybko:

  1. <?php
  2.  
  3. abstract class Enum
  4. {
  5. private $availableValues = array();
  6. private $value = NULL;
  7.  
  8. final public function __construct()
  9. {
  10. $this->availableValues = $this->getAvailableValues();
  11. }
  12.  
  13. final public function setValue( $value )
  14. {
  15. if ( ! in_array( $value, $this->availableValues, TRUE ) )
  16. {
  17. throw new Exception( 'Zla wartosc: ' . $value );
  18. }
  19.  
  20. $this->value = $value;
  21. }
  22.  
  23. final public function getValue()
  24. {
  25. return $this->value;
  26. }
  27.  
  28. protected abstract function getAvailableValues();
  29. }
  30.  
  31. class MonthEnum extends Enum
  32. {
  33. protected function getAvailableValues()
  34. {
  35. return array( 
  36. 'January',
  37. 'February',
  38. 'etc.'
  39. );
  40. }
  41. }
  42.  
  43. try
  44. {
  45. $me = new MonthEnum();
  46.  
  47. $me->setValue( 'January' );
  48. print( 'me->value == ' . $me->getValue() . "<br />n" );
  49. $me->setValue( 'ThisMonthDoesNotExist' );
  50. }
  51. catch ( Exception $e )
  52. {
  53. print( $e );
  54. }
  55. ?>
nasty
thanx
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.