Start · Sprachen · PHP · Referenz · version_compare

version_compare

Funktion

Vergleicht zwei Versionsnummern im PHP-Versionsformat und gibt das Vergleichsergebnis als Ganzzahl oder Bool zurück.

seit PHP 4.1.0 Kategorie: misc

Signatur

version_compare(string $version1, string $version2, ?string $operator = null): int|bool

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

Typ
int|bool
Beschreibung
Ohne 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.';
}
PHP 8.1 oder neuer — Fibers sind verfügbar.

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
1 -1

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;
}
1.0.0-dev 1.0.0-alpha 1.0.0-beta 1.0.0-RC1 1.0.0 1.0.0-pl1

// 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.