Start · Sprachen · PHP · Referenz · xdiff_string_merge3

xdiff_string_merge3

Funktion

Führt drei Strings mittels eines 3-Wege-Merges zusammen und gibt den zusammengeführten Inhalt zurück.

seit PHP 5.2.0 Kategorie: misc

Signatur

xdiff_string_merge3(string $old_data, string $new_file1, string $new_file2, string &$error): string|false

Beschreibung

xdiff_string_merge3 realisiert einen 3-Wege-Merge auf Basis von Zeichenketten: Es nimmt eine gemeinsame Ausgangsbasis ($old_data) und zwei davon abgeleitete Varianten ($new_file1, $new_file2) und versucht, beide Änderungen zu einem einzigen Ergebnis-String zu vereinen.

Dieses Verfahren ist typisch beim Zusammenführen paralleler Bearbeitungen desselben Textes, wie es z. B. in Versionsverwaltungssystemen vorkommt. Nicht-konflikthafte Änderungen werden automatisch zusammengeführt; treten Konflikte auf, werden diese im Ergebnis-String markiert und gleichzeitig über den &$error-Ausgabeparameter gemeldet.

Im Unterschied zu xdiff_file_merge3, das direkt mit Dateipfaden arbeitet, operiert diese Funktion vollständig im Arbeitsspeicher – nützlich, wenn die Daten ohnehin bereits als Strings vorliegen und kein Dateizugriff notwendig oder gewünscht ist.

Die Funktion setzt die PECL-Erweiterung xdiff voraus. Sie sollte eingesetzt werden, wenn Textinhalte aus zwei unabhängigen Quellen, die auf derselben Basis beruhen, zusammengeführt werden müssen – etwa beim kollaborativen Bearbeiten von Konfigurationsdateien oder Wiki-Inhalten.

Parameter

Name Typ Default Beschreibung
$old_data Pflicht string Der gemeinsame Ausgangszustand (Basis), von dem die beiden Varianten abgeleitet wurden.
$new_file1 Pflicht string Erste geänderte Version des Ausgangstextes.
$new_file2 Pflicht string Zweite geänderte Version des Ausgangstextes.
$error Pflicht string Referenz auf eine Variable, in der etwaige Konflikt-Informationen als String abgelegt werden. Enthält nach dem Aufruf eine Beschreibung der aufgetretenen Konflikte, sofern vorhanden.

Rückgabewert

Typ
string|false
Beschreibung
Gibt bei Erfolg den zusammengeführten String zurück. Enthält das Ergebnis Konflikte, werden diese im zurückgegebenen String durch spezielle Konfliktmarkierungen gekennzeichnet. Bei einem Fehler wird false zurückgegeben.

Beispiele

Konfliktfreier 3-Wege-Merge zweier Textvarianten

<?php
$basis = "Zeile 1\nZeile 2\nZeile 3\n";

// Variante A ändert Zeile 1
$varianteA = "Zeile 1 (geändert von A)\nZeile 2\nZeile 3\n";

// Variante B ändert Zeile 3
$varianteB = "Zeile 1\nZeile 2\nZeile 3 (geändert von B)\n";

$fehler = '';
$ergebnis = xdiff_string_merge3($basis, $varianteA, $varianteB, $fehler);

if ($ergebnis !== false) {
    echo "Merge-Ergebnis:\n" . $ergebnis;
} else {
    echo "Merge fehlgeschlagen.\n";
}

if (!empty($fehler)) {
    echo "Konflikte gefunden:\n" . $fehler;
}
Merge-Ergebnis: Zeile 1 (geändert von A) Zeile 2 Zeile 3 (geändert von B)

3-Wege-Merge mit Konflikterkennung

<?php
$basis = "Einleitung\nHauptteil\nSchluss\n";

// Beide Varianten ändern denselben Abschnitt -> Konflikt
$varianteA = "Einleitung\nHauptteil (Version A)\nSchluss\n";
$varianteB = "Einleitung\nHauptteil (Version B)\nSchluss\n";

$fehler = '';
$ergebnis = xdiff_string_merge3($basis, $varianteA, $varianteB, $fehler);

if ($ergebnis !== false) {
    echo "Zusammengeführter Text (mit Konfliktmarkierungen):\n";
    echo $ergebnis;
}

if (!empty($fehler)) {
    echo "\nKonflikt-Details:\n";
    echo $fehler;
}
Zusammengeführter Text (mit Konfliktmarkierungen): Einleitung <<<<<< Hauptteil (Version A) ====== Hauptteil (Version B) >>>>>> Schluss Konflikt-Details: ...

// Wichtig · Fallstricke

PECL-Abhängigkeit: Diese Funktion ist Teil der xdiff-Erweiterung, die separat installiert werden muss (pecl install xdiff). Sie ist nicht in der PHP-Standardinstallation enthalten.

Konfliktbehandlung: Das Vorhandensein von Konflikten im Ergebnis bedeutet nicht, dass die Funktion false zurückgibt – der zusammengeführte String wird trotzdem geliefert, enthält jedoch Konfliktmarkierungen. Die Anwendung muss $error prüfen und Konflikte ggf. manuell auflösen.

Binärdaten: Die Funktion ist für textbasierte Inhalte ausgelegt. Binärdaten können zu unvorhersehbaren Ergebnissen führen.

Deprecation: Die xdiff-Erweiterung wird nicht mehr aktiv gepflegt. Für neue Projekte sollten Alternativen wie SebastianBergmann/diff (Composer-Paket) in Betracht gezogen werden.