kherge/semver

管理语义版本号并进行比较。

1.0.0 2017-02-01 03:28 UTC

This package is auto-updated.

Last update: 2024-08-29 04:53:24 UTC


README

Build Status Packagist Packagist Pre Release

版本

一个用于解析和比较语义版本号的库。

用法

请注意,以下示例中不使用完全限定名称。所有关于接口、类和函数的引用都可以在命名空间 KHerGe\Version 中找到。另外,请注意以下示例不展示库的所有功能。请参考源代码文件获取更多信息。

简单

解析

对于非常简单的用例,您只需要使用 parse() 函数。

use function KHerGe\Version\parse;

使用此函数,您可以创建一个表示单个语义版本号的价值对象。值对象是不可变的,但提供了便利的方法,以便您可以更改值并接收新的值对象。

// Create a new value object.
$version = parse('1.2.3-alpha.1+20161004');

// Bump the patch number: 1.0.1
$patched = $version->incrementPatch();

// The original value object is unchanged.
echo $version; // 1.2.3-alpha.1+20161004

// But the patched version number has the change.
echo $patched; // 1.2.4

比较

也可以直接在值对象上执行简单的比较。

if ($patched->isGreaterThan($version)) {
    // $patched is greater than $version
}

验证

虽然 parse() 函数会对无效的语义版本数字符串表示抛出 InvalidStringRepresentationException 异常,但您仍然可以使用 is_valid() 函数自行检查。

use function KHerGe\Version\is_valid;

$version = '1.2.3-alpha.1+20161004';

if (is_valid($version)) {
    // $version is valid
}

复杂

实现

库将在任何 VersionInterface 实现上工作,但提供了一个包含许多额外便利方法的 Version 实现。

$version = new Version(

    // major
    1,

    // minor
    2,

    // patch
    3,

    // pre-release
    ['a', 'b', 'c'],

    // build
    ['x', 'y', 'z']

);

解析

如果您需要使用自己的 VersionInterface 实现,库提供了一个解析字符串表示的组件的函数,这样您就无需自己解析。

use function KHerGe\Version\parse_components;

$components = parse_components('1.2.3-alpha.1+20161004');

parse_components() 的结果可以用来创建一个新的实例,该实例实现了 VersionInterface。此函数执行自己的验证,因此使用 is_valid() 检查将是多余的。

$components = [
    'major' => 1,
    'minor' => 2,
    'patch' => 3,
    'pre-release' => ['alpha', '1'],
    'build' => ['20161004']
];

比较

库包含了一组预制的约束,所有这些约束都实现了 ConstraintInterface。这些约束可以混合使用,以执行比单独使用约束更为复杂的比较操作。

use KHerGe\Version\Compare\Constraint\AndX;
use KHerGe\Version\Compare\Constraint\EqualTo;
use KHerGe\Version\Compare\Constraint\GreaterThan;
use KHerGe\Version\Compare\Constraint\LessThan;
use KHerGe\Version\Compare\Constraint\OrX;

use function KHerGe\Version\parse;

// Match any of the following constraints.
$constraint = new OrX(
    [
        // Match all of the following constraints.
        new AndX(
            [
                // Must be greater than "0.2.3".
                new GreaterThan(parse('0.2.3')),

                // Must be less than "0.4.4".
                new LessThan(parse('0.4.4')),
            ]
        ),

        // Match exactly "0.4.5".
        new EqualTo(parse('0.4.5'))
    ]
);

// Verify that the version meets the constraints.
$version = parse('0.4.0');

if ($constraint->allows($version)) {
    // $version is allowed
}

需求

  • PHP 7.0 或更高版本

安装

要安装,您需要使用 Composer。

composer require kherge/semver

许可证

在 MIT 和 Apache 2.0 许可证下发布。

LICENSE