Signatur
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
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;
}
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;
}
// 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.