Beispiel #1
0
 /**
  * Convierte una cadena a su representación del tipo Version.
  *
  * @param Version|string|int|float|array $value Objeto a convertir.
  *
  * @return Version Objeto convertido desde $value.
  * */
 public static function parse($value)
 {
     if ($value instanceof Version) {
         return $value;
     }
     $version = [];
     // Try to convert into an array
     if (is_integer($value)) {
         // Integer for major value
         $version = [$value, 0];
     } elseif (is_float($value)) {
         // Integer part as major, and decimal part as minor
         $version = sprintf("%F", $value);
         $version = explode('.', $version);
     } elseif (is_array($value)) {
         // Implode first 4 places for major, minor, build and revision respectivally.
         $version = array_slice($value, 0, 4);
     } elseif (is_string($value)) {
         $version = explode('.', $value);
     } else {
         $msg = nml_msg('Unable to parse. Argument passed has an invalid type: "{0}".', typeof($value));
         throw new InvalidArgumentException($msg);
     }
     // $value ya debería ser un array.
     $c = count($version);
     if ($c > 4 || $c < 2) {
         $msg = nml_msg('Unable to parse. Argument passed has an invalid format: "{0}".', $value);
         //var_dump($version);
         throw new InvalidArgumentException($msg);
     }
     $major = (int) $version[0];
     $minor = (int) $version[1];
     $build = null;
     $revision = null;
     if (count($version) >= 3) {
         $build = VersionComponent::Parse($version[2]);
         if (count($version) == 4) {
             $revision = VersionComponent::Parse($version[3]);
         }
     }
     return new Version($major, $minor, $build, $revision);
 }