requtize / semver-converter
将SemVer版本(如Composer包)转换为带操作符的整数版本。帮助管理版本:存储、比较、排序和按条件检索。
0.4.0
2022-08-10 15:24 UTC
Requires
- php: ~5.5 || ~7.0 || ~8.0
- composer/semver: ^3.2
Requires (Dev)
- phpunit/phpunit: ^9.5
README
将SemVer版本(如Composer包)转换为带操作符的整数版本。帮助管理版本:存储、比较、排序和按条件检索。
转换器接受与Composer相同的版本,因此您可以使用接受语义版本控制的任何包管理器。
它是如何工作的?
对于每个版本,它使用Composer SemVer解析器来解析版本并使其标准化。然后,对于每个版本,转换器创建由点值拆分的数组。每个值都填充零并从中创建一个长字符串,该字符串被转换为整数。对于每个版本,我们都有一个大整数。
示例
- 版本 1.0.5
- 使用SemVer标准化: 1.0.5
- 拆分: [ 1, 0, 5 ]
- 转换为字符串并填充零: [ '001', '000', '005' ]
- 连接所有字符串: '001' + '000' + '005'
- 转换为整数: (int) '1000005'
结果: '1.0.5' == 1000005
示例
简单版本
$result = (new SemVerConverter)->convert('0.1.0'); // Result array (size=1) 0 => array (size=2) 'from' => array (size=2) 0 => int 1000000 1 => string '==' (length=2) 'to' => array (size=2) 0 => int 1000000 1 => string '==' (length=2)
版本之间
$result = (new SemVerConverter)->convert('>= 1.3.0 < 1.7.0'); // Result array (size=1) 0 => array (size=2) 'from' => array (size=2) 0 => int 1003000 1 => string '>=' (length=2) 'to' => array (size=2) 0 => int 1007000 1 => string '<' (length=1)
波浪号操作符
$result = (new SemVerConverter)->convert('~1.3'); // Result array (size=1) 0 => array (size=2) 'from' => array (size=2) 0 => int 1003000 1 => string '>=' (length=2) 'to' => array (size=2) 0 => int 2000000 1 => string '<' (length=1)
版本或
$result = (new SemVerConverter)->convert('^1.9 || 3.0.*'); // Result array (size=2) 0 => array (size=2) 'from' => array (size=2) 0 => int 1009000 1 => string '>=' (length=2) 'to' => array (size=2) 0 => int 2000000 1 => string '<' (length=1) 1 => array (size=2) 'from' => array (size=2) 0 => int 3000000 1 => string '>=' (length=2) 'to' => array (size=2) 0 => int 3001000 1 => string '<' (length=1)
设置
new SemVerConverter($zeros, $sections);
$zeros
定义每个版本部分的零填充数量。它允许定义结果应该有多长。
$sections
定义需要从输入生成多少个部分。默认为3,Composer SemVer生成4。这也对结果有影响。
许可证
此代码根据MIT许可证授权。