J'ai une classe Validator
qui crée une instance d'une classe Validations
, qui contient toutes les méthodes de validation. Lorsqu'une validation est effectuée, __call
dans Validator
est utilisé pour envoyer un appel Validator->validate_method
à Validations->method
. Par exemple, il existe une méthode dans Validations
appelée length_of
. Lorsque le code suivant est exécuté:Est-il mauvais d'utiliser Reflection dans le code de production?
$v = new Validator();
$v->validate_length_of(...);
la validation length_of
dans la classe Validations
est exécutée.
Afin de faire en sorte que __call
ne cherche pas à être envoyé à une méthode Validation
invalide ou non publique, j'utilise ReflectionMethod
pour vérifier la méthode spécifiée:
$method = new ReflectionMethod($this->validations, $validation_method);
if (!$method->isPublic())
{
// error
}
Je suis sûr que ce soit la seul moyen de déterminer si une méthode est publique ou non, mais je ne suis pas sûr que Reflection est approprié pour avoir dans le code de production. Est-ce une odeur de code?
Les modificateurs de visibilité sont ce qui sent ici. Supprimez simplement "private" et utilisez "method_exists". – user187291
@stereofrog Je n'essaie pas d'accéder à une méthode privée. J'essaie de * ne * pas autoriser l'accès aux méthodes privées. –