Frage

Gibt es eine Möglichkeit den abgeleitete Klassennamen von statischem Schlüsselwort zu bekommen? Was ich will, tatsächlich zu tun ist.

Erstellen Sie eine Spiegelung der abgeleiteten Klasse
Überprüfen Sie Wetterbär es die angegebene Klasse implementiert oder nicht

Ich habe eine statische Methode der Basisklasse ihren Namen Base::check() sagen Ich mag Base::check() wird für die Existenz der Interface-Implementierung überprüfen. die check () Methode den Namen der weiß interface.so ich brauche es nicht von der äußeren Welt zu sagen.

Aber wenn es keine Möglichkeit gibt DerivedClassName aus statischen Keyword Ich muss passieren den Klassenname des Verfahrens von der Außenwelt zu bekommen. Das ist keine gute Coding Prinzip.

Eine weitere Alternative kann ich tun ist. Ich kann eine ::instance() statische Methode machen, die die this zurück und ich kann eine get_class von seiner Rückkehr tun. Aber auch dies tweeks meiner Anwendung Prinzip.

So ist die erste Methode wirklich möglich? oder muss ich für einige alternative dieser Art gehen? Oder Haben Sie irgendeine andere Art von Alternativen haben?

War es hilfreich?

Lösung

Ich bin nicht sicher, ob ich verstehe, was Sie zu tun versuchen, vor allem, was Sie unter „ erhält den abgeleiteten Klassennamen von statischem Schlüsselwort “. Schauen Sie sich die folgenden Funktionen, um zu sehen, ob sie das tun, was Sie tun möchten:

Wenn Sie sich beziehen auf Späte statische Bindung , haben einen Blick auf


Ich nehme an, Sie versuchen, etwas zu tun:

class Base
{
    public static function check()
    {
        return in_array('IFoo', class_implements(get_called_class(), FALSE));
        // or
        $instanceClassName = get_called_class();
        return new $instanceClassName instanceof IFoo;
        // or
        $reflector = new ReflectionClass(get_called_class());
        return $reflector->implementsInterface('IFoo');           
    }
}
interface IFoo {};
class Foo extends Base implements IFoo {}

var_dump( Foo::check() );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top