Domanda

C'è un modo per ottenere il nome di classe derivata da statico parole chiave? Quello che in realtà voglio fare è.

fare una riflessione della
classe derivata Controllare Wheather implementa la classe specificata o no

Ho un metodo statico della classe base dire il suo nome Base::check() Voglio Base::check() sarà verificare l'esistenza del l'implementazione dell'interfaccia. il metodo di controllo () conosce il nome del interface.so Non ho bisogno di dire che dal mondo esterno.

Ma se non v'è alcun modo per ottenere NomeClasseDerivata da statico Keyword Io necessità di passare il nome della classe per il metodo dal mondo esterno. Il che non è una buona Coding principio.

Un'altra alternativa che posso fare è. Posso fare un metodo statico ::instance() che restituisce il this e posso fare un get_class dal suo ritorno. Ma questa Tweeks anche il mio principio di applicazione.

Così è il primo metodo davvero possibile? o ho bisogno di andare per qualche alternativa di questo genere? O avete qualsiasi altro tipo di alternative?

È stato utile?

Soluzione

Non sono sicuro se ho capito ciò che si sta cercando di fare, soprattutto cosa si intende per " ottenere il Derivato Nome Classe da statico parola chiave ". Controlla le seguenti funzioni per vedere se fanno quello che si vuole fare:

Se si sta riferendo a tardo binding statico , date un'occhiata a


suppongo si sta cercando di fare qualcosa di simile:

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() );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top