Protected Functions in vererbter Klasse über __call als Public definieren

Da wir unsere Codes mit dem Unittest-Framework PHPUnit absichern, wird für jede Klasse eine Unittest-Klassse angelegt. Nur wie komme ich da an die protected-Funktionen des Elternelements?

Früher implementierten wir jede protected-Methoden als public in der Unitest klasse und haben einfach den parent aufgerufen:

class Foo
{
    protected bar()
    {
        return "test"
    }
}

class unittestFoo extends Foo
{
    public bar()
    {
        return parent::bar();
    }
} 

 

Bei vielen protected-Methoden wird das alles bischen Aufwändig. Jede neue Methode muss in der Unittest-Klasse nachgezogen werden, ebenso Änderungen in der Parameterisierung der Methoden.

Nun sieht unsere abgeleitete Klasse folgendermaßen aus:

class Foo
{
    protected bar()
    {
        return "test"
    }
}

class unittestFoo extends Foo
{
    public function __call($method, array $args = array()) {
        if (!method_exists($this, $method))
            throw new BadMethodCallException("method '$method' does not exist");
        return call_user_func_array(array($this, $method),$args);
        
    }
}

 

Mehr benötigt unsere Unittest-Klasse nicht mehr. Alle Methoden der Parent-Klasse werden automatisch eingebunden.

Der Aufruf funktioniert in der abgeleiteten Klasse ganz normal:

$fooBar = new unittestFoo();
$fooBar->bar();

Momentan können keine Kommentare hinterlassen werden.

DIESE KUNDEN VERTRAUEN AUF DREIWERKEN: WEBDESIGN-AGENTUR AUS ROSENHEIM

Durch das Fortsetzen der Benutzung dieser Seite, stimmst du der Benutzung von Cookies zu. Weitere Informationen

Die Website verwendet Cookies. Einige davon sind erforderlich, um die Funktionsfähigkeit der Website zu gewährleisten. Andere werden verwendet, um die Benutzerumgebung zu optimieren. Durch die Nutzung der Website stimmen Sie der Verwendung dieser Cookies zu. Weitere Informationen zu Cookies finden Sie in unserem Impressum.

Schließen