2 Stimmen

Brauche Hilfe bei der PHP5.3 statischen Vererbung

Mit diesem statischen 'Vererbung' in php 5.3 habe ich ein kleines Problem. Ich muss testen, ob eine statische Funktion in einer statischen Klasse existiert, jedoch muss ich das von innerhalb einer Eltern-Static-Klasse aus testen.

Ich weiß, dass ich in php 5.3 das Schlüsselwort 'static' verwenden kann, um das Schlüsselwort 'this' zu simulieren. Ich finde einfach keinen Weg, um zu testen, ob die Funktion existiert.

Hier ist ein Beispiel:

// Elternklasse
class A{

// Klasse B wird sie erweitern und kann möglicherweise 
// statische Funktion namens 'func' haben
// Ich muss das testen

    public static function parse(array $a){
        if(function_exists(array(static, 'func'){
            static::func($a);
        }
    }
}

class B extends A {
    public static function func( array $a ){
        // macht etwas
    }
}

Jetzt muss ich B::parse(); ausführen. Die Idee ist, dass wenn die Unterklasse eine Funktion hat, diese verwendet wird, ansonsten nicht.

Ich habe versucht:

function_exists(static::func){}
isset(static::func){}

Diese 2 funktionieren nicht.

Irgendwelche Ideen, wie man das machen kann? Übrigens, ich kenne die Möglichkeit, eine Lambda-Funktion als Workaround zu übergeben, dies ist jedoch in meiner Situation keine Option.

Ich habe das Gefühl, dass es eine sehr einfache Lösung gibt, an die ich gerade nicht denken kann.

Jetzt muss ich

2voto

netcoder Punkte 64375

Sie können function_exists nicht für Klassen und Objekte (Methoden) verwenden, nur für Funktionen. Sie müssen method_exists oder is_callable verwenden. isset funktioniert nur mit Variablen. Außerdem simuliert static nicht $this, sie sind zwei völlig verschiedene Dinge.

Das gesagt habend, in diesem speziellen Fall müssen Sie is_callable mit einem in Anführungszeichen gesetzten static Schlüsselwort verwenden:

if (is_callable(array('static', 'func'))) {
    static::func();
}

oder...

if (is_callable('static::func')) {
    static::func();
}

0voto

johannes Punkte 15447

Versuchen

public static function parse(array $a){
    if(function_exists(array(get_called_class(), 'func') {
/*...*/

Siehe http://php.net/get_called_class

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X