/** * 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); }