PHP용 의미 체계 버전 관리 라이브러리. 이는 전체 의미 체계 버전 2.0.0 사양을 구현하고 제약 조건 에 대한 유효성 검사와 함께 의미 체계 버전을 구문 분석 , 비교 및 증분하는 기능을 제공합니다.
버전 | PHP 버전 |
---|---|
>=1.0, <1.2 | >=5.5 |
>=1.2, <3.0 | >=7.1 |
>=3.0 | >=8.1 |
composer require z4kn4fein/php-semver
Version
구성에는 다음 옵션이 지원됩니다.
Version::create()
사용하여 부분별로 빌드합니다.
Version:: create ( 3 , 5 , 2 , " alpha " , " build " );
Version::parse()
또는 Version::parseOrNull()
사용하여 문자열에서 구문 분석합니다.
Version:: parse ( " 3.5.2-alpha+build " );
생성된 Version
객체에서 다음 정보에 액세스할 수 있습니다.
<?php
use z4kn4fein SemVer Version ;
$ version = Version:: parse ( " 2.5.6-alpha.12+build.34 " );
echo $ version -> getMajor (); // 2
echo $ version -> getMinor (); // 5
echo $ version -> getPatch (); // 6
echo $ version -> getPreRelease (); // alpha.12
echo $ version -> getBuildMeta (); // build.34
echo $ version -> isPreRelease (); // true
echo $ version -> isStable (); // false
echo $ version -> withoutSuffixes (); // 2.5.6
echo $ version ; // 2.5.6-alpha.12+build.34
기본적으로 버전 구문 분석기는 1.0
과 같은 부분 버전과 v
접두사로 시작하는 버전이 잘못된 것으로 간주합니다. 이 동작은 strict
매개변수를 false
로 설정하여 끌 수 있습니다.
echo Version:: parse ( " v2.3-alpha " ); // exception
echo Version:: parse ( " 2.1 " ); // exception
echo Version:: parse ( " v3 " ); // exception
echo Version:: parse ( " v2.3-alpha " , false ); // 2.3.0-alpha
echo Version:: parse ( " 2.1 " , false ); // 2.1.0
echo Version:: parse ( " v3 " , false ); // 3.0.0
다음 비교 방법을 사용하면 두 개의 Version
객체를 비교할 수 있습니다.
<?php
use z4kn4fein SemVer Version ;
// with static methods
echo Version:: lessThan ( " 2.3.4 " , " 2.4.1 " ); // true
echo Version:: lessThanOrEqual ( " 2.4.1 " , " 2.4.1 " ); // true
echo Version:: greaterThan ( " 2.3.1-alpha.5 " , " 2.3.1-alpha.3 " ); // true
echo Version:: greaterThanOrEqual ( " 3.2.3 " , " 3.2.2 " ); // true
echo Version:: equal ( " 3.2.3 " , " 3.2.3+build.3 " ); // true
echo Version:: notEqual ( " 3.2.3 " , " 2.2.4 " ); // true
// compare() or compareString()
echo Version:: compare (Version:: parse ( " 2.3.4 " ), Version:: parse ( " 2.4.1 " )); // -1
echo Version:: compare (Version:: parse ( " 2.3.4 " ), Version:: parse ( " 2.3.4 " )); // 0
echo Version:: compare (Version:: parse ( " 2.3.4 " ), Version:: parse ( " 2.2.0 " )); // 1
echo Version:: compareString ( " 2.3.4 " , " 2.4.1 " ); // -1
echo Version:: compareString ( " 2.3.4 " , " 2.3.4 " ); // 0
echo Version:: compareString ( " 2.3.4 " , " 2.2.0 " ); // 1
// with instance methods
$ version = Version:: parse ( " 2.5.6-alpha.12+build.34 " );
echo $ version -> isLessThan (Version:: parse ( " 2.3.1 " )); // false
echo $ version -> isLessThanOrEqual (Version:: parse ( " 2.5.6-alpha.15 " )); // true
echo $ version -> isGreaterThan (Version:: parse ( " 2.5.6 " )); // false
echo $ version -> isLessThanOrEqual (Version:: parse ( " 2.5.6-alpha.12 " )); // true
echo $ version -> isEqual (Version:: parse ( " 2.5.6-alpha.12+build.56 " )); // true
echo $ version -> isNotEqual (Version:: parse ( " 2.2.4 " )); // true
Version::sort()
및 Version::sortString()
사용하여 버전 배열을 정렬할 수 있습니다.
<?php
use z4kn4fein SemVer Version ;
$ versions = array_map ( function ( string $ version ) {
return Version:: parse ( $ version );
}, [
" 1.0.1 " ,
" 1.0.1-alpha " ,
" 1.0.1-alpha.beta " ,
" 1.0.1-alpha.3 " ,
" 1.0.1-alpha.2 " ,
" 1.1.0 " ,
" 1.1.0+build " ,
]);
$ sorted = Version:: sort ( $ versions );
// The result:
// "1.0.1-alpha"
// "1.0.1-alpha.2"
// "1.0.1-alpha.3"
// "1.0.1-alpha.beta"
// "1.0.1"
// "1.1.0"
// "1.1.0+build"
역순으로 정렬하려는 경우 Version::rsort()
또는 Version::rsortString()
사용할 수 있습니다.
<?php
use z4kn4fein SemVer Version ;
$ versions = array_map ( function ( string $ version ) {
return Version:: parse ( $ version );
}, [
" 1.0.1 " ,
" 1.0.1-alpha " ,
" 1.0.1-alpha.beta " ,
" 1.0.1-alpha.3 " ,
" 1.0.1-alpha.2 " ,
" 1.1.0 " ,
" 1.1.0+build " ,
]);
$ sorted = Version:: rsort ( $ versions );
// The result:
// "1.1.0"
// "1.1.0+build"
// "1.0.1"
// "1.0.1-alpha.beta"
// "1.0.1-alpha.3"
// "1.0.1-alpha.2"
// "1.0.1-alpha"
Version::compare()
및 Version::compareString()
메서드를 usort()
에 대한 콜백으로 사용하여 버전 배열을 정렬할 수도 있습니다.
<?php
use z4kn4fein SemVer Version ;
$ versions = array_map ( function ( string $ version ) {
return Version:: parse ( $ version );
}, [
" 1.0.1 " ,
" 1.0.1-alpha " ,
" 1.0.1-alpha.beta " ,
" 1.0.1-alpha.3 " ,
" 1.0.1-alpha.2 " ,
" 1.1.0 " ,
" 1.1.0+build " ,
]);
usort ( $ versions , [ " z4kn4feinSemVerVersion " , " compare " ]);
// The result:
// "1.0.1-alpha"
// "1.0.1-alpha.2"
// "1.0.1-alpha.3"
// "1.0.1-alpha.beta"
// "1.0.1"
// "1.1.0"
// "1.1.0+build"
제약조건을 사용하면 버전이 일련의 규칙을 충족하는지 여부를 확인할 수 있습니다. 제약 조건은 논리 OR
및 AND
연산자와 결합된 하나 이상의 조건으로 설명할 수 있습니다.
조건은 일반적으로 비교 연산자와 >=1.2.0
과 같은 버전으로 구성됩니다. >=1.2.0
조건은 1.2.0
이상의 모든 버전에서 충족됩니다.
지원되는 비교 연산자:
=
같음(연산자가 없는 것과 동일함: 1.2.0
=1.2.0
의미함)!=
같지 않음<
미만<=
작거나 같음>
보다 큼>=
크거나 같음 조건은 공백으로 결합되어 조건 사이의 AND
논리 연산자를 나타낼 수 있습니다. OR
연산자는 ||
로 표현할 수 있습니다. 또는 |
조건 세트 사이.
예를 들어 제약 조건 >=1.2.0 <3.0.0 || >4.0.0
다음과 같이 해석됩니다. 1.2.0
이상 { AND } 3.0.0
미만 { OR } 4.0.0
이상인 버전만 허용됩니다 .
이전 제약 조건의 첫 번째 부분( >=1.2.0 <3.0.0
)은 단순한 의미 버전 범위임을 알 수 있습니다. 버전 범위를 표현하는 방법은 더 다양합니다. 다음 섹션에서는 사용 가능한 모든 옵션을 살펴보겠습니다.
보다 확장된 범위 표현을 위한 설탕인 특정 범위 표시기가 있습니다.
X-Range : x
, X
및 *
문자는 버전의 숫자 부분에 대한 와일드카드로 사용될 수 있습니다.
1.2.x
>=1.2.0 <1.3.0-0
으로 변환됩니다.1.x
>=1.0.0 <2.0.0-0
으로 변환됩니다.*
>=0.0.0
으로 변환됩니다.부분 버전 표현식에서 누락된 숫자는 와일드카드로 처리됩니다.
1.2
1.2.x
의미하며 이는 최종적으로 >=1.2.0 <1.3.0-0
으로 변환됩니다.1
1.x
또는 1.xx
의미하며 이는 최종적으로 >=1.0.0 <2.0.0-0
으로 변환됩니다.하이픈 범위 : 포함된 버전 범위를 설명합니다. 와일드카드는 최종 범위에서 평가되고 고려됩니다.
1.0.0 - 1.2.0
은 >=1.0.0 <=1.2.0
으로 변환됩니다.1.1 - 1.4.0
>=(>=1.1.0 <1.2.0-0) <=1.4.0
의미하며 이는 최종적으로 >=1.1.0 <=1.4.0
으로 변환됩니다.1.1.0 - 2
>=1.1.0 <=(>=2.0.0 <3.0.0-0)
의미하며 이는 최종적으로 >=1.1.0 <3.0.0-0
으로 변환됩니다. 물결표 범위( ~
) : 마이너 버전이 지정된 경우 패치 수준 범위를 설명하고, 그렇지 않은 경우 마이너 수준 범위를 설명합니다.
~1.0.1
은 >=1.0.1 <1.1.0-0
으로 변환됩니다.~1.0
>=1.0.0 <1.1.0-0
으로 변환됩니다.~1
>=1.0.0 <2.0.0-0
으로 변환됩니다.~1.0.0-alpha.1
은 >=1.0.1-alpha.1 <1.1.0-0
으로 변환됩니다. 캐럿 범위( ^
) : 버전의 가장 왼쪽에 있는 0이 아닌 부분에 대한 범위를 설명합니다.
^1.1.2
>=1.1.2 <2.0.0-0
으로 변환됩니다.^0.1.2
>=0.1.2 <0.2.0-0
으로 변환됩니다.^0.0.2
>=0.0.2 <0.0.3-0
으로 변환됩니다.^1.2
>=1.2.0 <2.0.0-0
으로 변환됩니다.^1
>=1.0.0 <2.0.0-0
으로 변환됩니다.^0.1.2-alpha.1
은 >=0.1.2-alpha.1 <0.2.0-0
으로 변환됩니다.버전이 제약 조건을 충족하는지 여부를 어떻게 확인할 수 있는지 살펴보겠습니다.
<?php
use z4kn4fein SemVer Version ;
use z4kn4fein SemVer Constraints Constraint ;
$ constraint = Constraint:: parse ( " >=1.2.0 " );
$ version = Version:: parse ( " 1.2.1 " );
echo $ version -> isSatisfying ( $ constraint ); // true
echo $ constraint -> isSatisfiedBy ( $ version ); // true
// Or using the static satisfies() method with strings:
echo Version:: satisfies ( " 1.2.1 " , " >=1.2.0 " ); // true
Version
객체는 getNext{Major|Minor|Patch|PreRelease}Version
메소드를 사용하여 자체적으로 증분된 버전을 생성할 수 있습니다. 이러한 방법을 사용하면 해당 부분이 증가하는 순서대로 다음 버전을 결정할 수 있습니다. Version
개체는 변경할 수 없으므로 각 증분 함수는 새 Version
생성합니다.
이 예에서는 안정적인 버전에서 증분이 작동하는 방식을 보여줍니다.
<?php
use z4kn4fein SemVer Version ;
use z4kn4fein SemVer Inc ;
$ stableVersion = Version:: create ( 1 , 0 , 0 );
echo $ stableVersion -> getNextMajorVersion (); // 2.0.0
echo $ stableVersion -> getNextMinorVersion (); // 1.1.0
echo $ stableVersion -> getNextPatchVersion (); // 1.0.1
echo $ stableVersion -> getNextPreReleaseVersion (); // 1.0.1-0
// or with the inc() method:
echo $ stableVersion -> inc (Inc:: MAJOR ); // 2.0.0
echo $ stableVersion -> inc (Inc:: MINOR ); // 1.1.0
echo $ stableVersion -> inc (Inc:: PATCH ); // 1.0.1
echo $ stableVersion -> inc (Inc:: PRE_RELEASE ); // 1.0.1-0
불안정한 버전의 경우:
<?php
use z4kn4fein SemVer Version ;
use z4kn4fein SemVer Inc ;
$ unstableVersion = Version:: parce ( " 1.0.0-alpha.2+build.1 " );
echo $ unstableVersion -> getNextMajorVersion (); // 2.0.0
echo $ unstableVersion -> getNextMinorVersion (); // 1.1.0
echo $ unstableVersion -> getNextPatchVersion (); // 1.0.0
echo $ unstableVersion -> getNextPreReleaseVersion (); // 1.0.0-alpha.3
// or with the inc() method:
echo $ unstableVersion -> inc (Inc:: MAJOR ); // 2.0.0
echo $ unstableVersion -> inc (Inc:: MINOR ); // 1.1.0
echo $ unstableVersion -> inc (Inc:: PATCH ); // 1.0.0
echo $ unstableVersion -> inc (Inc:: PRE_RELEASE ); // 1.0.0-alpha.3
각 증분 기능은 증분 버전에 시험판 ID를 설정하는 옵션을 제공합니다.
<?php
use z4kn4fein SemVer Version ;
use z4kn4fein SemVer Inc ;
$ version = Version:: parce ( " 1.0.0-alpha.1 " );
echo $ version -> getNextMajorVersion ( " beta " ); // 2.0.0-beta
echo $ version -> getNextMinorVersion ( "" ); // 1.1.0-0
echo $ version -> getNextPatchVersion ( " alpha " ); // 1.0.1-alpha
echo $ version -> getNextPreReleaseVersion ( " alpha " ); // 1.0.0-alpha.2
// or with the inc() method:
echo $ version -> inc (Inc:: MAJOR , " beta " ); // 2.0.0-beta
echo $ version -> inc (Inc:: MINOR , "" ); // 1.1.0-0
echo $ version -> inc (Inc:: PATCH , " alpha " ); // 1.0.1-alpha
echo $ version -> inc (Inc:: PRE_RELEASE , " alpha " ); // 1.0.0-alpha.2
copy()
메소드를 사용하여 특정 버전의 복사본을 만드는 것이 가능합니다. 선택적 매개변수를 사용하여 복사된 버전의 속성을 변경할 수 있습니다.
$ version = Version:: parse ( " 1.0.0-alpha.2+build.1 " );
echo $ version -> copy (); // 1.0.0-alpha.2+build.1
echo $ version -> copy ( 3 ); // 3.0.0-alpha.2+build.1
echo $ version -> copy ( null , 4 ); // 1.4.0-alpha.2+build.1
echo $ version -> copy ( null , null , 5 ); // 1.0.5-alpha.2+build.1
echo $ version -> copy ( null , null , null , " alpha.4 " ); // 1.0.0-alpha.4+build.1
echo $ version -> copy ( null , null , null , null , " build.3 " ); // 1.0.0-alpha.2+build.3
echo $ version -> copy ( 3 , 4 , 5 ); // 3.4.5-alpha.2+build.1
메모
선택적 매개 변수를 설정하지 않으면 copy()
메서드는 원본 버전의 정확한 복사본을 생성합니다.
잘못된 형식으로 인해 버전 또는 제약 조건 구문 분석이 실패하면 라이브러리에서 특정 SemverException
발생합니다.
메모
Version::parseOrNull()
및 Constraint::parseOrNull()
메서드는 구문 분석이 실패할 때 null
반환하므로 예외 없는 변환에 사용할 수 있습니다.