ptlis / semantic-version
用于处理语义版本号的工具。
Requires
- php: >=5.5.0
Requires (Dev)
- pdepend/pdepend: ^1.1
- phploc/phploc: ^2.0
- phpmd/phpmd: @dev
- phpunit/phpunit: ^4.0.0
- sebastian/phpcpd: ^2.0
- squizlabs/php_codesniffer: ^2.8
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.
使用方法
解析版本
首先创建一个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