ptlis/semantic-version

用于处理语义版本号的工具。

v0.11.0 2017-04-25 23:11 UTC

This package is auto-updated.

Last update: 2024-09-07 00:32:37 UTC


README

A modular, extensible library for PHP >= 5.6 providing APIs to support parsing & manipulation of semantic version numbers, comparators, ranges & collections.

The Semantic Versioning Specification describes the semantics and precedence rules used when parsing & manipulating version numbers etc.

Build Status Code Coverage Scrutinizer Code Quality Latest Stable Version

使用方法

解析版本

首先创建一个VersionEngine的实例

    use ptlis\SemanticVersion\VersionEngine();

    $engine = new VersionEngine();

然后调用parseVersion方法,传入一个版本号

    $version = $engine->parseVersion('1.5.0-rc.1');

如果解析失败,将抛出\RuntimeException异常。

解析版本范围

再次,创建一个VersionEngine的实例

    use ptlis\SemanticVersion\VersionEngine();

    $engine = new VersionEngine();

然后调用parseVersionRange方法,传入一个版本范围

    $version = $engine->parseVersion('1.5.0-3.0.0');

与之前一样,如果解析失败,将抛出\RuntimeException异常。

版本

Version类提供了一个简单的值类型,表示语义版本号。

它提供了简单的访问器,用于访问语义版本号的各个组件

    echo $version->getMajor();  // '1'
    echo $version->getMinor();  // '5'
    echo $version->getPatch();  // '0'
    echo $version->getLabel();  // 'rc.1'

一个__toString实现

    echo $version;  // '1.5.0-rc.1'

Version还实现了SatisfiedByVersionInterface,因此提供了isSatisfiedBy方法,如果版本匹配则返回true。

版本范围

版本范围是由实现VersionRangeInterface的类表示的版本范围约束的集合。

最简单的版本范围是一个版本和一个比较器(例如>=2.5.3,'<1.0.0'),这由ComparatorVersion类表示。

更复杂的范围可能包括一个上限和一个下限(例如~1.0.0,'^1.0.0','>=1.0.0,<2.0.0',它们都是等效的)。这由包含两个ComparatorVersion实例的LogicalAnd类表示。

最复杂的约束可能包含两个范围(例如1.2.5-2.3.2|^4.0.0)。这由包含两个实现VersionRangeInterface的类的包装表示。

由于VersionRangeInterface扩展了SatisfiedByVersionInterface,因此这些实现了isSatisfiedBy方法,如果传入的版本满足约束则返回true。

已知限制

目前,在处理标签和构建元数据时,此库在几个方面与规范存在差异;这是由于处理版本范围的解析方式。然而,在将解析代码与从Packagist抓取的完整包列表进行测试后,我发现没有受此影响的包。

以下是一些有效的语义版本号示例,但库无法解析

  • 1.0.0-0.3.7
  • 1.0.0-beta-17