jelix / version
解析任何版本语法,包括语义版本。使用 Composer 版本约束语法比较版本。
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: 8.5.*
This package is auto-updated.
Last update: 2024-09-09 14:04:06 UTC
README
这个 PHP 库可以解析任何版本语法,包括 语义版本。它还允许使用 Composer 版本约束语法比较版本。
安装
您可以从 Composer 安装它。在您的项目中
composer require "jelix/version"
用法
解析
使用 Jelix\Version\Parser
类检索包含所有版本信息的 Jelix\Version\Version
对象。
$version = \Jelix\Version\Parser::parse('1.2.3b2'); $version->toString(); // '1.2.3-beta.2' $version->getMajor(); // 1 $version->getMinor(); // 2 $version->getPatch(); // 3 $version->getStabilityVersion(); // array('beta', '2') $version->getNextMajorVersion(); // Version object for '2.0.0' $version->getNextMinorVersion(); // Version object for '1.3.0' $version->getNextPatchVersion(); // Version object for '1.2.4' $version->getBranchVersion(); // '1.2'
支持的版本语法示例
- 1.0, 1.2.3
- 1.2-alpha, 1.2a, 1.2alpha, 1.2alpha.3, 1.2a1.3
- 1.2.3-beta, 1.2b, 1.2beta, 1.2beta.3, 1.2b3.4
- 1.2RC, 1.2-rc.4.5
- 1.2-dev, 1.2b1-dev, 1.2b1-dev.9, 1.2RC-dev, 1.2RC2-dev.1700
解析器还支持 '次要版本',即附加到版本后面的版本,后面跟一个 -
或一个 :
。
例如:1.2.3-1.4.5
,1.2.3:1.4.5
。在这里,1.4.5
是次要版本。
当检索此类版本的 Version
对象时,您可以通过 getSecondaryVersion()
方法访问次要版本,该方法返回一个 Version
对象
$version = \Jelix\Version\Parser::parse('1.2.3:1.4.5'); $version->toString(); // '1.2.3:1.4.5' $version->toString(true, false); // '1.2.3' $version2 = $version->getSecondaryVersion(); $version2->toString(); // '1.4.5' $version->getNextMajorVersion(); // Version object for '2.0.0' $version->getNextMinorVersion(); // Version object for '1.3.0' $version->getNextPatchVersion(); // Version object for '1.2.4' $version->getBranchVersion(); // '1.2'
简单比较
$v1 = '1.2.3'; $v2 = '1.4.5'; $result = \Jelix\Version\VersionComparator::compareVersion($v1, $v2);
compareVersion()
返回
-1
如果 $v1 < $v20
如果 $v1 == $v21
如果 $v1 > $v2
比较两个版本的示例
\Jelix\Version\VersionComparator::compareVersion('1.2pre','1.2RC');
如果主要版本相等,次要版本也会进行比较。在这种情况下,如果版本字符串中不包含次要版本,则认为它具有 '0.0' 版本号,因此它被认为是比具有次要版本的版本更低。
您还有另一个方法 compare()
,它接受 Version
对象作为参数
$v1 = \Jelix\Version\Parser::parse('1.2.3'); $v2 = \Jelix\Version\Parser::parse('1.4.5'); $result = \Jelix\Version\VersionComparator::compare($v1, $v2);
与范围比较
compareVersionRange()
允许您使用运算符比较版本。它与 Composer 支持的版本约束兼容。
- 比较运算符:
>
、<
、>=
、<=
、=
、!=
- 没有运算符表示
=
~
:指定版本和下一个主要版本之间的范围(不包括下一个主要版本本身及其不稳定变体)~1.2
等价于>=1.2 <2.0.0-dev
~1.2.3
等价于>=1.2.3 <1.3.0-dev
- '^':指定版本和下一个次要版本之间的范围
^1.2.3
等价于>=1.2.3 <1.3.0
^0.3
等价于>=0.3.0 <0.4.0
- 使用连字符分隔符指定范围:'1.2 - 1.5'
1.0 - 2.0
等价于>=1.0.0 <2.1
(因为 2.0 被解释为 2.0.*)1.0.0 - 2.1.0
等价于>=1.0.0 <=2.1.0
- 它还支持带或不带运算符的版本通配符:
1.*
、1.2.*
您可以使用布尔运算符组合多个约束
- AND 运算符:
,
或 - OR 运算符:
||
或|
。
// check if 0.5 is between 0.8 and 1.0 or if it is higher than 2.0 \Jelix\Version\VersionComparator::compareVersionRange('0.5','<1.0,>0.8|>2.0'); // check if 0.5 is between 0.8 and 1.0 \Jelix\Version\VersionComparator::compareVersionRange('0.5','0.8 - 1.0'); // with a wildcard \Jelix\Version\VersionComparator::compareVersionRange('1.1', '1.1.*'); // returns true \Jelix\Version\VersionComparator::compareVersionRange('1.1.2', '1.2.*'); // returns false \Jelix\Version\VersionComparator::compareVersionRange('1.3.0', '>=1.2.*'); // returns true
注意:范围比较仅在主要版本上执行。如果版本字符串包含次要版本,则不会比较次要版本。要比较次要版本与范围,应使用 getSecondaryVersion()
方法检索次要版本。
$version = Jelix\Version\Parser::parse('1.2.3:1.0.0'); \Jelix\Version\VersionComparator::compareVersionRange($version, '>=1.2.*'); // returns true $version2 = $version->getSecondaryVersion(); $version2->toString(); // '1.0.0' \Jelix\Version\VersionComparator::compareVersionRange($version2, '>=1.2.*'); // returns false
历史
这些类别的祖先已经包含在 Jelix 框架中多年,直到 Jelix 1.6 版本,并于 2016 年作为一个独立的仓库发布。