Signatur
Beschreibung
version_compare() analysiert und vergleicht zwei Versionsstrings nach den Regeln des PHP-Versionsformats. Dabei werden nicht nur rein numerische Segmente (z. B. 1.2.3), sondern auch Zeichenketten wie alpha, beta, RC oder dev korrekt gewichtet. Die Funktion ist besonders nützlich, wenn im Code geprüft werden soll, ob eine bestimmte PHP-Version oder eine Bibliotheksversion vorhanden ist.
Wird kein dritter Parameter übergeben, liefert die Funktion -1 wenn version1 kleiner ist, 0 bei Gleichheit und 1 wenn version1 größer ist. Wird ein Vergleichsoperator als dritter Parameter angegeben (z. B. <, <=, >, >=, ==, !=), gibt die Funktion stattdessen einen boolschen Wert zurück.
Die Gewichtung der speziellen Versions-Suffixe lautet von klein nach groß: dev < alpha / a < beta / b < RC / rc < keine Angabe < pl / p. Dieses Verhalten entspricht dem internen PHP-Versionsvergleich.
Ein typischer Anwendungsfall ist die Laufzeitprüfung, ob die aktuell ausgeführte PHP-Version mindestens eine bestimmte Version besitzt, bevor neue Sprachfeatures oder Funktionen genutzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $version1 Pflicht | string | Die erste Versionsnummer als Zeichenkette, z. B. "8.1.0" oder "2.0.0-beta". |
|
| $version2 Pflicht | string | Die zweite Versionsnummer als Zeichenkette, mit der version1 verglichen wird. |
|
| $operator | string|null | null | Optionaler Vergleichsoperator: <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne. Bei Angabe wird ein bool zurückgegeben. |
Rückgabewert
operator: -1 wenn version1 < version2, 0 bei Gleichheit, 1 wenn version1 > version2. Mit operator: true wenn die Bedingung erfüllt ist, sonst false.Beispiele
PHP-Mindestversion zur Laufzeit prüfen
<?php
// Prüfen ob die aktuelle PHP-Version mindestens 8.1.0 ist
if (version_compare(PHP_VERSION, '8.1.0', '>=')) {
echo 'PHP 8.1 oder neuer — Fibers sind verfügbar.';
} else {
echo 'PHP-Version zu alt. Mindestens 8.1.0 erforderlich.';
}
Versionsvergleich ohne Operator (Rückgabewert -1, 0 oder 1)
<?php
$result = version_compare('1.10.0', '1.9.0');
echo $result; // 1, weil 1.10.0 > 1.9.0
$result2 = version_compare('2.0.0-alpha', '2.0.0');
echo PHP_EOL . $result2; // -1, weil alpha < release
Vergleich von Release-Kandidaten und stabilen Versionen
<?php
$versions = ['1.0.0-dev', '1.0.0-alpha', '1.0.0-beta', '1.0.0-RC1', '1.0.0', '1.0.0-pl1'];
usort($versions, 'version_compare');
foreach ($versions as $v) {
echo $v . PHP_EOL;
}
// Wichtig · Fallstricke
Achtung: version_compare() behandelt fehlende Segmente nicht immer intuitiv. So gilt version_compare('1.0', '1.0.0') als 0 (gleich), während version_compare('1.0', '1.0.0.0') ebenfalls 0 ergibt — fehlende Segmente werden als 0 gewertet.
Bei der Verwendung von PHP_VERSION ist Vorsicht geboten, da manche Distributionen Suffix-Informationen wie -ubuntu1 anhängen. In solchen Fällen empfiehlt sich PHP_MAJOR_VERSION, PHP_MINOR_VERSION und PHP_RELEASE_VERSION oder die Konstante PHP_VERSION_ID für numerische Vergleiche.
Der Vergleich ist nicht für semantische Versionierung (SemVer) mit Build-Metadaten (+build.1) ausgelegt. Für SemVer-konformes Parsen empfiehlt sich eine dedizierte Bibliothek.