19
19
use \InvalidArgumentException ;
20
20
21
21
/**
22
- * Representa el número de versión de un elemento o ensamblado, de la forma "1.0.0.0 ". Sólo
22
+ * Representa el número de versión de un programa o ensamblado, de la forma "1.2.3.4 ". Sólo
23
23
* siendo obligatorios el primer y segundo componente.
24
24
* No se puede heredar esta clase.
25
25
*
@@ -32,11 +32,13 @@ final class Version extends Object implements IEquatable, IComparable {
32
32
/**
33
33
* Crea una nueva instancia con los números principal, secundario, de compilación (opcional)
34
34
* y revisión (opcional).
35
+ * Para comprobar si la versión es válida, usar el método IsValid.
35
36
*
36
- * @param int $major Componente principal
37
- * @param int $minor Componente secundario
38
- * @param mixed $build Componente de compilación
39
- * @param mixed $revision Componente de revisión
37
+ *
38
+ * @param int $major Componente principal
39
+ * @param int $minor Componente secundario
40
+ * @param int|string|VersionComponent $build Componente de compilación
41
+ * @param int|string|VersionComponent $revision Componente de revisión
40
42
* @throw InvalidArgumentException
41
43
* */
42
44
function __construct ($ major = 0 , $ minor = 0 , $ build = 0 , $ revision = 0 ) {
@@ -109,6 +111,7 @@ public static function Parse($value) {
109
111
110
112
/**
111
113
* Obtiene el valor del componente principal del número de versión del objeto actual.
114
+ * Ésta propiedad es de sólo lectura.
112
115
*
113
116
*
114
117
* @var int Componente principal del número de versión
@@ -121,6 +124,7 @@ public function get_Major() { return $this->_major; }
121
124
122
125
/**
123
126
* Obtiene el valor del componente secundario del número de versión del objeto actual.
127
+ * Ésta propiedad es de sólo lectura.
124
128
*
125
129
*
126
130
* @var int Componente secundario del número de versión
@@ -132,6 +136,7 @@ public function get_Minor() { return $this->_minor; }
132
136
133
137
/**
134
138
* Obtiene el valor del componente de compilación del número de versión del objeto actual.
139
+ * Ésta propiedad es de sólo lectura.
135
140
*
136
141
*
137
142
* @var VersionComponent Componente de compilación del número de versión
@@ -143,6 +148,7 @@ public function get_Build() { return $this->_build; }
143
148
144
149
/**
145
150
* Obtiene el valor del componente de revisión del número de versión del objeto actual.
151
+ * Ésta propiedad es de sólo lectura.
146
152
*
147
153
*
148
154
* @var VersionComponent Componente de revisión del número de versión
@@ -155,51 +161,66 @@ public function get_Revision() { return $this->_revision; }
155
161
156
162
/**
157
163
* Convierte la instancia actual en su representación en cadena.
158
- * Por defecto, si no se especifica el número de revisión (o es menor a 1),
159
- * no se incluye en la salida.
160
- * Si tampoco se especifica el número de compilación (o es menor a 1),
161
- * tampoco se incluye el número de revisión.
162
- * Los componentes principal y secundario siempre se muestran, aunque sean cero (0).
164
+ * Por defecto, si no están definidos los componentes de compilación y revisión, no se
165
+ * incluyen en la salida.
166
+ * Use el método IsValid para determinar si la versión es válida antes de devolver esta cadena.
163
167
*
164
168
*
165
- * @return string Representación de la versión en forma de cadena:
166
- * 'major.minor[.build[.revision]]'
169
+ * @see Version::IsValid
170
+ * @return string Representación de la versión en forma de cadena: 'major.minor[.build[.revision]]'
167
171
* */
168
172
public function ToString () {
169
- $ s = $ this ->Major . '. ' . $ this ->Minor ;
170
- //var_dump($this->Build);
171
-
172
- if ($ this ->Build ->IntValue > 0 ) {
173
- $ s .= '. ' . $ this ->Build ;
174
-
175
- if ($ this ->Revision ->IntValue > 0 ) {
176
- $ s .= '. ' . $ this ->Revision ;
177
- }
178
-
173
+ $ s [0 ] = $ this ->Major ;
174
+ $ s [1 ] = $ this ->Minor ;
175
+
176
+ if ($ this ->Revision ->IsNotDefault ()) {
177
+ $ s [2 ] = $ this ->Build ;
178
+ $ s [3 ] = $ this ->Revision ;
179
+ } else {
180
+ if ($ this ->Build ->IsNotDefault ()) {
181
+ $ s [2 ] = $ this ->Build ;
182
+
183
+ if ($ this ->Revision ->IsNotDefault ()) {
184
+ $ s [3 ] = $ this ->Revision ;
185
+ }
186
+ }
179
187
}
188
+ $ v = implode ('. ' , $ s );
180
189
181
- return $ s ;
190
+ return $ v ;
182
191
}
183
192
184
193
/**
185
194
* Indica si la instancia actual es un número de versión válido.
186
- * Al menos un atributo de la versión debe estar establecido .
195
+ * Al menos los componentes Major y Minor de la versión deben estar establecidos .
187
196
*
188
197
*
189
198
* @return boolean Un valor que indica si la instancia actual es válida.
190
199
* */
191
200
public function IsValid () {
192
- if (!$ this ->Major ){
193
- if (!$ this ->Minor ) {
194
- if (!$ this ->Build ->IntValue > 0 ) {
195
- if (!$ this ->Revision ->IntValue > 0 ) {
196
- return false ;
201
+ $ r = ($ this ->Major > 0 or $ this ->Minor > 0 ); //No puede ser '0.0'
202
+
203
+ if ($ r ) {
204
+ $ r = ($ this ->Build != null and $ this ->Revision != null );
205
+ if ($ r ) {
206
+
207
+ $ r = (bool )(($ this ->Build ->StringValue == '' ) and ($ this ->Revision ->StringValue == '' ));
208
+
209
+ if (!$ r ) {
210
+ if ($ this ->Build ->StringValue != '' ) {
211
+ //Sólo es válido el texto en Build si el componente de revisión es cero:
212
+ $ r = $ this ->Revision ->IsDefault ();
213
+ }
214
+
215
+ if ($ this ->Revision ->StringValue != '' ) {
216
+ //Sólo es válido el texto en Revision si el texto de Build está vacío:
217
+ $ r = ($ this ->Build ->StringValue == '' );
197
218
}
198
219
}
199
220
}
200
221
}
201
222
202
- return true ;
223
+ return ( bool ) $ r ;
203
224
}
204
225
205
226
/**
0 commit comments