Enum.php
4.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<?php
/**
* i-Educar - Sistema de gestão escolar
*
* Copyright (C) 2006 Prefeitura Municipal de Itajaí
* <ctima@itajai.sc.gov.br>
*
* Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
* sob os termos da Licença Pública Geral GNU conforme publicada pela Free
* Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
* qualquer versão posterior.
*
* Este programa é distribuído na expectativa de que seja útil, porém, SEM
* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU
* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
* do GNU para mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
* com este programa; se não, escreva para a Free Software Foundation, Inc., no
* endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*
* @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
* @category i-Educar
* @license @@license@@
* @package CoreExt_Enum
* @since Arquivo disponível desde a versão 1.1.0
* @version $Id$
*/
require_once 'CoreExt/Singleton.php';
/**
* CoreExt_Enum abstract class.
*
* Provê uma interface simples de criação de instâncias semelhantes a um
* Enum do Java.
*
* As semelhanças são poucas mas a intenção é a de dar uma forma direta de
* criar tipos enumerados. Para isso, basta subclassificar essa classe e prover
* valores para o array $_data. Adicionalmente, prover constantes que ajudaram
* ao usuario da classe a facilmente acessar os valores dos enumerados é uma
* sugestão.
*
* O stub de teste CoreExt_Enum1Stub é um exemplo de como criar tipos
* enumerados.
*
* Essa classe implementa também a interface ArrayAccess de SPL, provendo acesso
* fácil aos valores do enumerado em uma forma de array:
*
* <code>
* <?php
* $enum = new Enum();
* print $enum[Enum::ONE];
* </code>
*
* @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
* @category i-Educar
* @license @@license@@
* @link http://br2.php.net/manual/en/class.arrayaccess.php ArrayAccess interface
* @package CoreExt_Singleton
* @since Classe disponível desde a versão 1.1.0
* @todo Verificar se é substituível pela implementação de Enum disponível
* em spl_types do Pecl {@link http://www.php.net/manual/en/splenum.construct.php SplEnum}.
* @version @@package_version@@
*/
abstract class CoreExt_Enum extends CoreExt_Singleton implements ArrayAccess
{
/**
* Array que emula um enum.
* @var array
*/
protected $_data = array();
/**
* Retorna o valor para um dado índice de CoreExt_Enum.
* @param string|int $key
* @return mixed
*/
public function getValue($key)
{
return $this->_data[$key];
}
/**
* Retorna todos os valores de CoreExt_Enum.
* @return array
*/
public function getValues()
{
return array_values($this->_data);
}
/**
* Retorna o valor da índice para um determinado valor.
* @param mixed $value
* @return int|string
*/
public function getKey($value)
{
return array_search($value, $this->_data);
}
/**
* Retorna todos os índices de CoreExt_Enum.
* @return array
*/
public function getKeys()
{
return array_keys($this->_data);
}
/**
* Retorna o array de enums.
* @return array
*/
public function getEnums()
{
return $this->_data;
}
/**
* Implementa offsetExists da interface ArrayAccess.
* @link http://br2.php.net/manual/en/arrayaccess.offsetexists.php
* @param string|int $offset
* @return bool
*/
public function offsetExists($offset)
{
return isset($this->_data[$offset]);
}
/**
* Implementa offsetUnset da interface ArrayAccess.
* @link http://br2.php.net/manual/en/arrayaccess.offsetunset.php
* @throws CoreExt_Exception
*/
public function offsetUnset($offset)
{
require_once 'CoreExt/Exception.php';
throw new CoreExt_Exception('Um "' . get_class($this) . '" é um objeto read-only.');
}
/**
* Implementa offsetSet da interface ArrayAccess.
*
* Uma objeto CoreExt_Enum é apenas leitura.
*
* @link http://br2.php.net/manual/en/arrayaccess.offsetset.php
* @param string|int $offset
* @param mixed $value
* @throws CoreExt_Exception
*/
public function offsetSet($offset, $value)
{
require_once 'CoreExt/Exception.php';
throw new CoreExt_Exception('Um "' . get_class($this) . '" é um objeto read-only.');
}
/**
* Implementa offsetGet da interface ArrayAccess.
*
* @link http://br2.php.net/manual/en/arrayaccess.offsetget.php
* @param string|int $offset
* @return mixed
*/
public function offsetGet($offset)
{
return $this->_data[$offset];
}
}