vierbergenlars/php-semver

该软件包已被废弃且不再维护。作者建议使用composer/semver软件包。

PHP语义版本器

v3.0.4 2023-05-02 06:45 UTC

README

node-semver 1.1.2迁移到PHP

Build Status Scrutinizer Quality Score Latest Stable Version Total Downloads

php-semver 2.x 与 semver 1.0.0 兼容,但不与 semver 2.0.0 兼容。如果需要 semver 2.0.0 兼容性,请查看php-semver 3.x

使用方法

<?php

use vierbergenlars\SemVer\version;
use vierbergenlars\SemVer\expression;
use vierbergenlars\SemVer\SemVerException;

// Check if a version is valid
$semver = new version('1.2.3');
$semver = new version('a.b.c'); //SemVerException thrown

//Get a clean version string
$semver = new version('=v1.2.3');
$semver->getVersion(); //'1.2.3'

//Check if a version satisfies a range
$semver = new version('1.2.3');
$semver->satisfies(new expression('1.x || >=2.5.0 || 5.0.0 - 7.2.3')); //true
# OR
$range = new expression('1.x || >=2.5.0 || 5.0.0 - 7.2.3');
$range->satisfiedBy(new version('1.2.3')); //true

//Compare two versions
version::gt('1.2.3', '9.8.7'); //false
version::lt('1.2.3', '9.8.7'); //true

版本

版本按照以下顺序包含以下内容

  • 一个数字(主版本号)
  • 一个点
  • 一个数字(次版本号)
  • 一个点
  • 一个数字(修订号)
  • 可选:一个连字符,后跟一个数字(构建号)
  • 可选:一组几乎包含任何非空白字符(标签)

去除开头的 "=""v" 字符,并忽略。

比较

使用以下算法对版本进行排序,给定两个版本并要求找到其中较大的一个

  • 如果主版本号在数值上不同,则选择主版本号较大的那个。 2.3.4 > 1.3.4
  • 如果次版本号在数值上不同,则选择次版本号较大的那个。 2.3.4 > 2.2.4
  • 如果修订号在数值上不同,则选择修订号较大的那个。 2.3.4 > 2.3.3
  • 如果只有一个有构建号,则选择有构建号的那个。 2.3.4-0 > 2.3.4
  • 如果它们都有构建号,并且构建号在数值上不同,则选择构建号较大的那个。 2.3.4-10 > 2.3.4-9
  • 如果只有一个有标签,则选择没有标签的那个。 2.3.4 > 2.3.4-beta
  • 如果它们都有标签,则选择字典顺序较大的标签。 2.3.4-beta > 2.3.4-alpha
  • 此时,它们相等。

范围

支持以下范围样式

  • >1.2.3 大于特定版本。
  • <1.2.3 小于
  • 1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
  • ~1.2.3 := >=1.2.3 <1.3.0
  • ~1.2 := >=1.2.0 <2.0.0
  • ~1 := >=1.0.0 <2.0.0
  • 1.2.x := >=1.2.0 <1.3.0
  • 1.x := >=1.0.0 <2.0.0

可以使用空格(表示“并且”)或 ||(表示“或者”)将范围连接起来。

函数

  • $version->valid():返回解析后的版本,如果不有效则返回null。
  • $version->inc($type):返回通过发布类型(主版本、次版本、修订或构建)增加的版本,如果提供的发布类型无效则返回null。

比较

  • version::gt($v1, $v2)v1 > v2
  • version::gte($v1, $v2)v1 >= v2
  • version::lt($v1, $v2)v1 < v2
  • version::lte($v1, $v2)v1 <= v2
  • version::eq($v1, $v2): v1 == v2 如果它们在逻辑上等效,则为真,即使它们不是完全相同的字符串。您已经知道如何比较字符串。
  • version::neq($v1, $v2): v1 != v2 eq 的相反数。
  • version::cmp($v1, $comparator, $v2): 传入一个比较字符串,它将调用上面的相应函数。 "===""!==" 执行简单的字符串比较,但包括在内以示完整。如果提供了无效的比较字符串,则抛出异常。
  • version::compare($v1, $v2): 如果 v1 == v2,则返回 0;如果 v1 > v2,则返回 1;如果 v1 < v2,则返回 -1。如果传递给 usort(),则按升序排序。
  • version::rcompare($v1, $v2): compare 的反转。如果传递给 usort(),则按降序排序版本数组。

范围

  • $expression->validRange(): 返回有效的范围或 null,如果它无效。
  • $version->satisfies($range): 如果版本满足范围,则返回 true
  • $expression->maxSatisfying($versions): 返回满足范围数组中的最高版本,如果没有则返回 null

感谢

所有贡献者 (https://github.com/vierbergenlars/php-semver/graphs/contributors)

@isaacs 和其他对 node-semver 的贡献者