PHP statique :: NomClasseDerivee
-
28-09-2019 - |
Question
Est-il possible d'obtenir le nom classe dérivée de mots-clés statique? Ce que je veux vraiment faire est.
Faire un reflet de la classe dérivée
Vérifiez Wheather qu'il implémente la classe spécifiée ou non
J'ai une méthode statique de la classe de base dit son nom Base::check()
Je veux Base::check()
vérifiera l'existence de la mise en œuvre d'interface.
la vérification méthode () connaît le nom du interface.so Je ne ai pas besoin de le dire du monde extérieur.
Mais s'il n'y a pas moyen d'obtenir NomClasseDerivee de besoin statique Keyword Je passe le nom de classe à la méthode du monde extérieur. Ce qui est pas un bon principe de codage.
Une autre alternative que je peut faire est. Je peux faire une méthode statique ::instance()
qui retourne le this
et je peux faire un get_class de son retour. Mais cela aussi TWEEKS mon principe d'application.
est la première méthode vraiment possible? ou je dois aller pour une alternative de ce genre? Ou Avez-vous un autre type de solutions de rechange?
La solution
Je ne sais pas si je comprends ce que vous essayez de faire, en particulier ce que vous entendez par « obtenir le nom classe dérivée de mots-clés statique ». Consultez les fonctions suivantes pour voir si elles font ce que vous voulez faire:
-
class_implements
- Retourne les interfaces qui sont mises en œuvre par le classe donnée -
class_parents
- Retourne les classes parent de la classe donnée -
is_a
- Vérifie si l'objet est de cette classe ou a cette classe comme l'un de ses parents, -
is_subclass_of
- Vérifie si l'objet a cette classe comme l'un de ses parents, -
instanceof
type opérateur
Si vous référenceurs fin Liaison statique , jetez un oeil à
-
get_called_class
- la "liaison statique tardive" nom de classe
Je suppose que vous essayez de faire quelque chose comme ceci:
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() );