00001 <?php 00002 /*************************************************************************** 00003 * Copyright (C) 2004-2007 by Konstantin V. Arkhipov * 00004 * * 00005 * This program is free software; you can redistribute it and/or modify * 00006 * it under the terms of the GNU Lesser General Public License as * 00007 * published by the Free Software Foundation; either version 3 of the * 00008 * License, or (at your option) any later version. * 00009 * * 00010 ***************************************************************************/ 00011 00020 abstract class Enumeration extends NamedObject implements Serializable 00021 { 00022 protected $names = array(/* override me */); 00023 00024 final public function __construct($id) 00025 { 00026 $this->setId($id); 00027 } 00028 00030 00031 public function serialize() 00032 { 00033 return (string) $this->id; 00034 } 00035 00036 public function unserialize($serialized) 00037 { 00038 $this->setId($serialized); 00039 } 00041 00042 public static function getList(Enumeration $enum) 00043 { 00044 return $enum->getObjectList(); 00045 } 00046 00051 public static function getAnyId() 00052 { 00053 return 1; 00054 } 00055 00057 public function getId() 00058 { 00059 return $this->id; 00060 } 00061 00062 public function getObjectList() 00063 { 00064 $list = array(); 00065 $names = $this->getNameList(); 00066 00067 foreach (array_keys($names) as $id) 00068 $list[] = new $this($id); 00069 00070 return $list; 00071 } 00072 00073 public function toString() 00074 { 00075 return $this->name; 00076 } 00077 00078 public function getNameList() 00079 { 00080 return $this->names; 00081 } 00082 00086 public function setId($id) 00087 { 00088 $names = $this->getNameList(); 00089 00090 if (isset($names[$id])) { 00091 $this->id = $id; 00092 $this->name = $names[$id]; 00093 } else 00094 throw new MissingElementException( 00095 'knows nothing about such id == '.$id 00096 ); 00097 00098 return $this; 00099 } 00100 } 00101 ?>