Semantische Versionierungsbibliothek für PHP. Es implementiert die vollständige semantische Spezifikation der Version 2.0.0 und bietet die Möglichkeit, semantische Versionen zu analysieren , zu vergleichen und zu erhöhen sowie eine Validierung anhand von Einschränkungen durchzuführen.
Version | PHP-Version |
---|---|
>=1.0, <1.2 | >=5,5 |
>=1.2, <3.0 | >=7.1 |
>=3.0 | >=8.1 |
composer require z4kn4fein/php-semver
Die folgenden Optionen werden zum Erstellen einer Version
unterstützt:
Teil für Teil erstellen mit Version::create()
.
Version:: create ( 3 , 5 , 2 , " alpha " , " build " );
Parsen einer Zeichenfolge mit Version::parse()
oder Version::parseOrNull()
.
Version:: parse ( " 3.5.2-alpha+build " );
Auf die folgenden Informationen kann über ein erstelltes Version
zugegriffen werden:
<?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
Standardmäßig betrachtet der Versionsparser Teilversionen wie 1.0
und Versionen, die mit dem v
Präfix beginnen, als ungültig. Dieses Verhalten kann deaktiviert werden, indem der strict
Parameter auf false
gesetzt wird.
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
Mit den folgenden Vergleichsmethoden ist es möglich, zwei Version
zu vergleichen.
<?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()
und Version::sortString()
stehen zum Sortieren eines Arrays von Versionen zur Verfügung.
<?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"
Wenn Sie in umgekehrter Reihenfolge sortieren möchten, können Sie Version::rsort()
oder Version::rsortString()
verwenden.
<?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"
Die Methoden Version::compare()
und Version::compareString()
können auch als Rückruf für usort()
verwendet werden, um ein Array von Versionen zu sortieren.
<?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"
Mit Einschränkungen ist es möglich zu überprüfen, ob eine Version einem Regelsatz entspricht oder nicht. Eine Einschränkung kann als eine oder mehrere Bedingungen in Kombination mit logischen OR
und AND
Operatoren beschrieben werden.
Bedingungen bestehen normalerweise aus einem Vergleichsoperator und einer Version wie >=1.2.0
. Die Bedingung >=1.2.0
würde von jeder Version erfüllt werden, die größer oder gleich 1.2.0
ist.
Unterstützte Vergleichsoperatoren:
=
Gleich (entspricht keinem Operator: 1.2.0
bedeutet =1.2.0
)!=
Nicht gleich<
Weniger als<=
Kleiner oder gleich>
Größer als>=
Größer oder gleich Bedingungen können mit Leerzeichen verbunden werden, die den logischen AND
Operator zwischen ihnen darstellen. Der OR
Operator kann mit ||
ausgedrückt werden oder |
zwischen Bedingungssätzen.
Beispielsweise gilt die Einschränkung >=1.2.0 <3.0.0 || >4.0.0
bedeutet: Es sind nur die Versionen zulässig, die entweder größer oder gleich 1.2.0
{ AND } kleiner als 3.0.0
{ OR } größer als 4.0.0
sind .
Wir können feststellen, dass der erste Teil der vorherigen Einschränkung ( >=1.2.0 <3.0.0
) ein einfacher semantischer Versionsbereich ist. Es gibt mehr Möglichkeiten, Versionsbereiche auszudrücken. Im folgenden Abschnitt werden alle verfügbaren Optionen erläutert.
Es gibt bestimmte Bereichsindikatoren, die Zucker für Ausdrücke mit erweitertem Bereich sind.
X-Range : Die Zeichen x
, X
und *
können als Platzhalter für die numerischen Teile einer Version verwendet werden.
1.2.x
bedeutet >=1.2.0 <1.3.0-0
1.x
bedeutet >=1.0.0 <2.0.0-0
*
bedeutet >=0.0.0
In Teilversionsausdrücken werden die fehlenden Zahlen als Platzhalter behandelt.
1.2
bedeutet 1.2.x
, was letztendlich zu >=1.2.0 <1.3.0-0
führt1
bedeutet 1.x
oder 1.xx
was letztendlich zu >=1.0.0 <2.0.0-0
führtBindestrichbereich : Beschreibt einen umfassenden Versionsbereich. Wildcards werden ausgewertet und im Endbereich berücksichtigt.
1.0.0 - 1.2.0
bedeutet >=1.0.0 <=1.2.0
1.1 - 1.4.0
bedeutet >=(>=1.1.0 <1.2.0-0) <=1.4.0
was letztendlich zu >=1.1.0 <=1.4.0
führt1.1.0 - 2
bedeutet >=1.1.0 <=(>=2.0.0 <3.0.0-0)
was letztendlich zu >=1.1.0 <3.0.0-0
führt Tilde-Bereich ( ~
) : Beschreibt einen Patch-Level-Bereich, wenn die Nebenversion angegeben ist, oder einen Neben-Level-Bereich, wenn dies nicht der Fall ist.
~1.0.1
bedeutet >=1.0.1 <1.1.0-0
~1.0
bedeutet >=1.0.0 <1.1.0-0
~1
bedeutet >=1.0.0 <2.0.0-0
~1.0.0-alpha.1
entspricht >=1.0.1-alpha.1 <1.1.0-0
Caret-Bereich ( ^
) : Beschreibt einen Bereich in Bezug auf den am weitesten links liegenden Nicht-Null-Teil der Version.
^1.1.2
übersetzt in >=1.1.2 <2.0.0-0
^0.1.2
entspricht >=0.1.2 <0.2.0-0
^0.0.2
entspricht >=0.0.2 <0.0.3-0
^1.2
entspricht >=1.2.0 <2.0.0-0
^1
bedeutet >=1.0.0 <2.0.0-0
^0.1.2-alpha.1
übersetzt in >=0.1.2-alpha.1 <0.2.0-0
Sehen wir uns an, wie wir feststellen können, ob eine Version eine Einschränkung erfüllt oder nicht.
<?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
können mit den getNext{Major|Minor|Patch|PreRelease}Version
Methoden inkrementierte Versionen von sich selbst erzeugen. Diese Methoden können verwendet werden, um die nächste Version in der Reihenfolge zu ermitteln, die um das entsprechende Teil erhöht wird. Version
sind unveränderlich , daher erstellt jede Inkrementierungsfunktion eine neue Version
.
Dieses Beispiel zeigt, wie die Inkrementierung bei einer stabilen Version funktioniert:
<?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
Im Falle einer instabilen Version:
<?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
Jede inkrementierende Funktion bietet die Option, eine Vorabversionsidentität für die inkrementierte Version festzulegen.
<?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
Mit der Methode copy()
ist es möglich, eine Kopie einer bestimmten Version zu erstellen. Es ermöglicht die Änderung der Eigenschaften der kopierten Version mit optionalen Parametern.
$ 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
Notiz
Ohne das Festlegen eines optionalen Parameters erstellt die Methode copy()
eine exakte Kopie der Originalversion.
Wenn die Versions- oder Einschränkungsanalyse aufgrund eines ungültigen Formats fehlschlägt, löst die Bibliothek eine bestimmte SemverException
aus.
Notiz
Die Methoden Version::parseOrNull()
und Constraint::parseOrNull()
können für ausnahmelose Konvertierungen verwendet werden, da sie null
zurückgeben, wenn die Analyse fehlschlägt.