
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-semverVersion構築するために次のオプションがサポートされています。
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 次の比較方法を使用して、2 つの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 " )); // trueVersion::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 つ以上の条件として記述することができます。
条件は通常、比較演算子と>=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に変換されます。キャレット範囲 ( ^ ) : バージョンの最も左の非ゼロ部分に関する範囲を記述します。
^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返すため、例外のない変換に使用できます。