1919 use \InvalidArgumentException ;
2020
2121 /**
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
2323 * siendo obligatorios el primer y segundo componente.
2424 * No se puede heredar esta clase.
2525 *
@@ -32,11 +32,13 @@ final class Version extends Object implements IEquatable, IComparable {
3232 /**
3333 * Crea una nueva instancia con los números principal, secundario, de compilación (opcional)
3434 * y revisión (opcional).
35+ * Para comprobar si la versión es válida, usar el método IsValid.
3536 *
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
4042 * @throw InvalidArgumentException
4143 * */
4244 function __construct ($ major = 0 , $ minor = 0 , $ build = 0 , $ revision = 0 ) {
@@ -109,6 +111,7 @@ public static function Parse($value) {
109111
110112 /**
111113 * Obtiene el valor del componente principal del número de versión del objeto actual.
114+ * Ésta propiedad es de sólo lectura.
112115 *
113116 *
114117 * @var int Componente principal del número de versión
@@ -121,6 +124,7 @@ public function get_Major() { return $this->_major; }
121124
122125 /**
123126 * Obtiene el valor del componente secundario del número de versión del objeto actual.
127+ * Ésta propiedad es de sólo lectura.
124128 *
125129 *
126130 * @var int Componente secundario del número de versión
@@ -132,6 +136,7 @@ public function get_Minor() { return $this->_minor; }
132136
133137 /**
134138 * 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.
135140 *
136141 *
137142 * @var VersionComponent Componente de compilación del número de versión
@@ -143,6 +148,7 @@ public function get_Build() { return $this->_build; }
143148
144149 /**
145150 * 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.
146152 *
147153 *
148154 * @var VersionComponent Componente de revisión del número de versión
@@ -155,51 +161,66 @@ public function get_Revision() { return $this->_revision; }
155161
156162 /**
157163 * 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.
163167 *
164168 *
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]]'
167171 * */
168172 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+ }
179187 }
188+ $ v = implode ('. ' , $ s );
180189
181- return $ s ;
190+ return $ v ;
182191 }
183192
184193 /**
185194 * 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 .
187196 *
188197 *
189198 * @return boolean Un valor que indica si la instancia actual es válida.
190199 * */
191200 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 == '' );
197218 }
198219 }
199220 }
200221 }
201222
202- return true ;
223+ return ( bool ) $ r ;
203224 }
204225
205226 /**
0 commit comments