sclable/版本比较
Requires (Dev)
- evert/phpdoc-md: ^0.1.1
- phpunit/phpunit: ^4.7
- sclable/coding-standards: 0.1.0.2
This package is not auto-updated.
Last update: 2016-06-29 12:33:06 UTC
README
一个既小又实用的库,用于管理 语义化版本控制。
安装
该库可以通过 composer 安装
composer.phar require sclable/version-comparison
使用
直接版本比较
比较版本 A 和版本 B。
示例
$a = \Sclable\VersionComparison\Version::create('1.1.0');
$b = \Sclable\VersionComparison\Version::create('1.2.0');
echo $a->isGreaterThan($b) ? 'TRUE' : 'FALSE'; // echoes FALSE
echo $a->isLessThan($b) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $a->isEqual($b) ? 'TRUE' : 'FALSE'; // echoes FALSE
echo $a->isNotEqual($b) ? 'TRUE' : 'FALSE'; // echoes TRUE
版本排序
按语义顺序对版本列表进行排序。有可用的两个排序回调函数,一个用于排序版本对象列表,一个用于排序版本字符串列表
\Sclable\VersionComparison\Version::getVersionSorter($order = Version::SORT_ASC)
- 排序版本对象列表
- $order 定义是否升序或降序排序,使用 SORT_* 常量选择所需结果
\Sclable\VersionComparison\Version::getVersionStringSorter($order = Version::SORT_ASC)
- 排序版本字符串列表
- $order 定义是否升序或降序排序,使用 SORT_* 常量选择所需结果
示例
$sort = [
'1.2.0',
'1.1.0',
'1.0.0',
'1.3.0-alpha',
'1.3.0',
'1.3.0-beta1',
'1.3.0-beta2',
'1.3.0-beta',
'1.3.0-rc',
'1.4.0'
];
usort($sort, \Sclable\VersionComparison\Version::getVersionStringSorter();
var_dump($sort);
/*
array (
'1.0.0',
'1.1.0',
'1.2.0',
'1.3.0-alpha',
'1.3.0-beta',
'1.3.0-beta1',
'1.3.0-beta2',
'1.3.0-rc',
'1.3.0',
'1.4.0'
)
*/
版本选择器
版本选择器描述了版本应该如何,例如:大于 1.1,稳定,但低于版本 2.0。所以像 ^1.2.3
这样的版本选择器将允许所有大于或等于 1.2.3
的稳定版本,但不允许任何 2.* 版本。
$selector = \Sclable\VersionComparison\VersionSelector::create('^1.1');
$a = \Sclable\VersionComparison\Version::create('1.2.3');
$b = \Sclable\VersionComparison\Version::create('1.4.0');
$c = \Sclable\VersionComparison\Version::create('2.0.0');
echo $selector->matches($a) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $selector->matches($b) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $selector->matches($c) ? 'TRUE' : 'FALSE'; // echoes FALSE
精确选择器
1.2.3
此选择器要求版本完全匹配。
$selector = \Sclable\VersionComparison\VersionSelector::create('1.2.3');
$a = \Sclable\VersionComparison\Version::create('1.2.3');
$b = \Sclable\VersionComparison\Version::create('1.2.4');
echo $selector->matches($a) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $selector->matches($b) ? 'TRUE' : 'FALSE'; // echoes FALSE
通配符选择器
1.2.*
此选择器要求通配符前的版本号匹配。
$selector = \Sclable\VersionComparison\VersionSelector::create('1.2.*');
$a = \Sclable\VersionComparison\Version::create('1.2.3');
$b = \Sclable\VersionComparison\Version::create('1.2.4');
$c = \Sclable\VersionComparison\Version::create('1.3.0');
echo $selector->matches($a) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $selector->matches($b) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $selector->matches($c) ? 'TRUE' : 'FALSE'; // echoes FALSE
波浪符选择器
~1.2.3
此选择器要求版本大于或等于定义的数字,但最后一个数字之前的数字将不会匹配,如果增加。因此,在上面的示例中,版本 1.2.0
会太低,版本 1.2.3
将是最低的选择,版本 1.2.9
也可以,但版本 1.3.0
或更高将不再匹配。像 ~1
这样的选择器与 1.*
相同。
$selector = \Sclable\VersionComparison\VersionSelector::create('~1.2.3');
$a = \Sclable\VersionComparison\Version::create('1.2.0');
$b = \Sclable\VersionComparison\Version::create('1.2.3');
$c = \Sclable\VersionComparison\Version::create('1.2.5');
$d = \Sclable\VersionComparison\Version::create('1.3.0');
echo $selector->matches($a) ? 'TRUE' : 'FALSE'; // echoes FALSE
echo $selector->matches($b) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $selector->matches($c) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $selector->matches($d) ? 'TRUE' : 'FALSE'; // echoes FALSE
角标选择器
^1.2.3
此选择器要求版本大于或等于定义的数字,但低于下一个 主要 版本。因此,在上面的示例中,版本 1.2.0
会太低,版本 1.2.3
将是最低的选择,版本 1.4.2
也可以,但版本 2.0.0
或更高将不再匹配。
$selector = \Sclable\VersionComparison\VersionSelector::create('^1.2.3');
$a = \Sclable\VersionComparison\Version::create('1.2.0');
$b = \Sclable\VersionComparison\Version::create('1.2.3');
$c = \Sclable\VersionComparison\Version::create('1.4.2');
$d = \Sclable\VersionComparison\Version::create('2.0.0');
echo $selector->matches($a) ? 'TRUE' : 'FALSE'; // echoes FALSE
echo $selector->matches($b) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $selector->matches($c) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $selector->matches($d) ? 'TRUE' : 'FALSE'; // echoes FALSE
稳定性修饰符
1.2.3-dev
这修改了所需的稳定性。默认稳定性是 稳定
。修饰符可以应用于所有选择器。
$stable = \Sclable\VersionComparison\VersionSelector::create('1.2.3');
$dev = \Sclable\VersionComparison\VersionSelector::create('1.2.3-dev');
$a = \Sclable\VersionComparison\Version::create('1.2.3');
$b = \Sclable\VersionComparison\Version::create('1.2.3-beta');
echo $stable->matches($a) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $stable->matches($b) ? 'TRUE' : 'FALSE'; // echoes FALSE
echo $dev->matches($a) ? 'TRUE' : 'FALSE'; // echoes TRUE
echo $dev->matches($b) ? 'TRUE' : 'FALSE'; // echoes TRUE
版本池
版本池对于匹配一组版本与选择器非常有用。
选择
从池中选择所有匹配的版本。
$pool = \Sclable\VersionComparison\VersionPool::create([
'1.0.0', '1.2.3', '1.4.2', '2.0.0'
]);
foreach ($pool->select('^1.1.0') as $version) {
echo $version->getVersion() . PHP_EOL;
}
// prints
// 1.2.3
// 1.4.2
全选
从池中选择所有匹配所有选择器的版本。
$pool = \Sclable\VersionComparison\VersionPool::create([
'1.0.0', '1.2.3', '1.4.2', '2.0.0'
]);
$matches = $pool->selectAll(['^1.0', '1.2.*']);
foreach ($matches as $version) {
echo $version->getVersion() . PHP_EOL;
}
// prints
// 1.2.3
匹配
这个小助手有助于简化代码
$pool = \Sclable\VersionComparison\VersionPool::create([
'1.0.0', '1.2.3', '1.4.2', '2.0.0'
]);
if ($pool->match('^1.1.0', $matches)) {
// we have one or more matches, let's do something with it
} else {
// the selector does not match any version. we can skip the hard work.
}
获取最佳匹配
在池中搜索选择器的最佳匹配。
$pool = \Sclable\VersionComparison\VersionPool::create([
'1.0.0', '1.2.3', '1.4.2', '2.0.0'
]);
$best = $pool->getBestMatch('^1.1.0');
echo $best->getVersion();
// prints
// 1.4.2
选择器集合
选择器可以组合使用,并且仍然可以匹配版本或版本池
$selectorA = \Sclable\VersionComparison\VersionSelector::create('^1.0.0');
$selectorB = \Sclable\VersionComparison\VersionSelector::create('~1.2.3');
$collection = \Sclable\VersionComparison\VersionSelectorCollection::create([
$selectorA, $selectorB
]);
$version = \Sclable\VersionComparison\Version::create('1.2.4');
echo $collection->matches($version) ? 'TRUE' : 'FALSE'; // echoes TRUE
API 文档
基本 API 文档位于此处:[doc/ApiIndex.md](https://github.com/sclable/version-comparison/blob/HEAD/doc/ApiIndex.md)
许可证
有关许可证和版权信息,请参阅[LICENSE](https://github.com/sclable/version-comparison/blob/HEAD/./LICENSE)文件。