sclable/版本比较

此包已被弃用且不再维护。作者建议使用 composer/semver 包。

一个小型用于比较版本信息的库。

v0.3.0 2015-12-17 16:25 UTC

This package is not auto-updated.

Last update: 2016-06-29 12:33:06 UTC


README

一个既小又实用的库,用于管理 语义化版本控制

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

安装

该库可以通过 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)文件。