Start · Sprachen · PHP · Referenz · runkit7_method_copy

runkit7_method_copy

Funktion

Kopiert eine Methode aus einer Quellklasse in eine Zielklasse, optional unter einem neuen Namen.

Kategorie: misc

Signatur

runkit7_method_copy(string $dClass, string $dMethod, string $sClass, string $sMethod = null): bool

Beschreibung

runkit7_method_copy() ist Teil der Runkit7-Erweiterung und ermöglicht es, zur Laufzeit eine Methode aus einer Klasse in eine andere zu kopieren. Die Originalmethode in der Quellklasse bleibt dabei unverändert erhalten.

Die Funktion ist besonders nützlich in Test-Umgebungen oder beim dynamischen Zusammenstellen von Klassen, wenn Verhalten aus einer bestehenden Klasse in eine andere übertragen werden soll, ohne Vererbung oder Traits einsetzen zu können oder zu wollen. Sie erlaubt außerdem, die kopierte Methode unter einem anderen Namen in der Zielklasse zu registrieren.

Wird der Parameter sMethod weggelassen oder auf null gesetzt, wird der Methodenname aus der Quellklasse (sClass) auch für die Zielklasse (dClass) verwendet. Falls in der Zielklasse bereits eine Methode mit dem angestrebten Namen existiert, schlägt die Funktion fehl.

Hinweis: Die Runkit7-Erweiterung muss separat installiert und in der php.ini aktiviert sein. Sie ist nicht Teil des PHP-Kerns. Die Nutzung in Produktionsumgebungen wird nicht empfohlen, da das Manipulieren von Klassen zur Laufzeit zu schwer nachvollziehbarem Verhalten führen kann.

Parameter

Name Typ Default Beschreibung
$dClass Pflicht string Name der Zielklasse, in die die Methode kopiert werden soll.
$dMethod Pflicht string Name, unter dem die Methode in der Zielklasse registriert wird.
$sClass Pflicht string Name der Quellklasse, aus der die Methode kopiert wird.
$sMethod string null Name der zu kopierenden Methode in der Quellklasse. Wird null übergeben oder der Parameter weggelassen, wird dMethod als Methodenname in der Quellklasse verwendet.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die Quellmethode nicht existiert oder in der Zielklasse bereits eine gleichnamige Methode vorhanden ist).

Beispiele

Methode von einer Klasse in eine andere kopieren

<?php
class Quelle {
    public function sagHallo(string $name): string {
        return "Hallo, $name!";
    }
}

class Ziel {
    // Noch keine sagHallo-Methode
}

// Methode 'sagHallo' von 'Quelle' nach 'Ziel' kopieren
runkit7_method_copy('Ziel', 'sagHallo', 'Quelle', 'sagHallo');

$obj = new Ziel();
echo $obj->sagHallo('Welt'); // Hallo, Welt!
Hallo, Welt!

Methode unter neuem Namen in Zielklasse einfügen

<?php
class Werkzeugkasten {
    public function berechneQuadrat(int $n): int {
        return $n * $n;
    }
}

class Rechner {
    // Soll die Methode unter anderem Namen erhalten
}

// 'berechneQuadrat' aus 'Werkzeugkasten' als 'quadrat' in 'Rechner' registrieren
runkit7_method_copy('Rechner', 'quadrat', 'Werkzeugkasten', 'berechneQuadrat');

$rechner = new Rechner();
echo $rechner->quadrat(7); // 49
49

// Wichtig · Fallstricke

Vorsicht bei Produktionsumgebungen: Das dynamische Verändern von Klassen zur Laufzeit mittels Runkit7 kann zu unerwartetem Verhalten, schwer debuggbaren Fehlern und Inkompatibilitäten mit OpCode-Caches wie OPcache führen. Der Einsatz sollte auf Testzwecke oder stark kontrollierte Szenarien beschränkt bleiben.

Die Funktion gehört zur Runkit7-Erweiterung (PECL), die den Nachfolger der ursprünglichen runkit-Erweiterung darstellt und aktiv für neuere PHP-Versionen gepflegt wird. Installation via pecl install runkit7.

Wenn in der Zielklasse bereits eine Methode mit dem gewünschten Namen existiert, muss diese zuerst mit runkit7_method_remove() entfernt werden, bevor runkit7_method_copy() erfolgreich ausgeführt werden kann.