Signatur
Beschreibung
uopz_rename ist Teil der UOPZ-Erweiterung (User Operations for Zend) und erlaubt es, eine bereits definierte Funktion oder Methode während der Laufzeit unter einem neuen Namen verfügbar zu machen. Nach dem Umbenennen ist die Funktion nur noch unter dem neuen Namen aufrufbar; der alte Name ist nicht mehr gültig.
Die Funktion ist vor allem für Unit-Tests und Mocking nützlich, wenn man interne PHP-Funktionen oder selbst definierte Funktionen temporär durch eigene Implementierungen ersetzen möchte, ohne den Quellcode dauerhaft zu verändern. Typischerweise wird uopz_rename eingesetzt, um eine Originalfunktion beiseitezuschieben, bevor eine Testdoppel-Implementierung unter dem ursprünglichen Namen registriert wird.
Für das Umbenennen von Methoden einer Klasse existiert eine Überladung der Funktion, bei der zunächst der Klassenname als erster Parameter übergeben wird: uopz_rename(string $class, string $function, string $rename). Ohne Klassenname wird eine globale Funktion umbenannt.
Hinweis: Die UOPZ-Erweiterung ist nur für PHP-CLI und Testumgebungen gedacht. Sie sollte niemals in einer Produktionsumgebung eingesetzt werden, da sie grundlegende Laufzeitannahmen der PHP-Engine verletzt und zu schwer nachvollziehbaren Fehlern führen kann.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class | string | Optionaler Klassenname. Wird dieser angegeben, wird eine Methode der Klasse umbenannt statt einer globalen Funktion. | |
| $function Pflicht | string | Der aktuelle Name der Funktion oder Methode, die umbenannt werden soll. | |
| $rename Pflicht | string | Der neue Name, unter dem die Funktion oder Methode künftig aufrufbar sein soll. |
Rückgabewert
Beispiele
Globale Funktion zur Laufzeit umbenennen
<?php
// Originale Funktion
function greet(string $name): string {
return "Hallo, $name!";
}
// Funktion umbenennen
uopz_rename('greet', 'greet_original');
// Neue Implementierung unter altem Namen registrieren
uopz_function('greet', function(string $name): string {
return "Mocked: Hallo, $name!";
});
echo greet('Welt'); // Mocked: Hallo, Welt!
echo greet_original('Welt'); // Hallo, Welt!
Methode einer Klasse umbenennen
<?php
class Calculator {
public function add(int $a, int $b): int {
return $a + $b;
}
}
// Methode 'add' in 'add_original' umbenennen
uopz_rename('Calculator', 'add', 'add_original');
// Neue Methode unter altem Namen bereitstellen
uopz_function('Calculator', 'add', function(int $a, int $b): int {
return $a + $b + 100; // Manipulierte Implementierung für Tests
});
$calc = new Calculator();
echo $calc->add(2, 3); // 105 (manipuliert)
echo $calc->add_original(2, 3); // 5 (original)
// Wichtig · Fallstricke
Nur für Testumgebungen: uopz_rename sollte ausschließlich in Entwicklungs- und Testumgebungen (z. B. mit PHPUnit) verwendet werden. In Produktionsumgebungen kann der Einsatz zu unvorhergesehenen Abstürzen, Sicherheitslücken und schwer debuggbaren Fehlern führen.
Irreversibilität: Eine mit uopz_rename durchgeführte Umbenennung ist für die Dauer des aktuellen PHP-Prozesses permanent. Ein Rückgängigmachen erfordert ein erneutes Umbenennen zurück zum ursprünglichen Namen.
Kompatibilität: Die UOPZ-Erweiterung wird aktiv weiterentwickelt, und das Verhalten einzelner Funktionen kann sich zwischen Versionen unterscheiden. Es empfiehlt sich, die jeweils aktuelle Dokumentation der UOPZ-Erweiterung zu konsultieren.