Vérifier si la méthode existe dans la même classe
Donc, method_exists()
nécessite un objet pour voir si une méthode existe. Mais je veux savoir si une méthode existe à partir de l'intérieur de la même catégorie.
J'ai une méthode que les processus des infos et peut recevoir une action, qui exécute une méthode pour traiter davantage de cette info. Je veux vérifier si la méthode existe avant de l'appeler. Comment puis-je l'atteindre?
Exemple:
class Foo{
public function bar($info, $action = null){
//Process Info
$this->$action();
}
}
Les réponses ci-dessous sont très bien, juste une remarque additionnelle: avez-vous demander à vous-même pourquoi vous avez besoin de savoir si la méthode existe? Cette situation survenir si vous avez une méthode héritée d'un parent de la classe ou si vous êtes incertain à propos de ce que l'actuelle classe hérite de. Les deux cas peuvent être traités à l'aide d'une interface ou d'un résumé de la méthode de définition. Ce qui est plus transparent et se déplace dans l'erreur d'exécution au moment de la compilation, ce qui est préférable.
Parce que j'ai d'autres méthodes qui sont publics et d'autres processus que de l'information et de renvoyer les données traitées, la première méthode ne permet pas de retour, car il peut recevoir des données qui ont juste besoin d'être traitées et n'a pas besoin de retourner quoi que ce soit. Mais je pensais que ce serait un gain de temps pour appeler l'autre méthode à partir de la première méthode, si nécessaire, mais encore être en mesure de les appeler separatelly.
Mais à l'intérieur de la classe elle-même, pourquoi devrait-il être difficile de savoir si une méthode existe? Je veux dire soit est déclarés/mis en œuvre dans la classe ou on ne l'est pas. Comment et pourquoi en changer au moment de l'exécution? Je dirais que vous savez exactement si la méthode existe.
Parce que
Ah, vous spécifiez une méthode en s'en remettant son nom à la chaîne. En effet, très laid et l'insécurité...
Parce que j'ai d'autres méthodes qui sont publics et d'autres processus que de l'information et de renvoyer les données traitées, la première méthode ne permet pas de retour, car il peut recevoir des données qui ont juste besoin d'être traitées et n'a pas besoin de retourner quoi que ce soit. Mais je pensais que ce serait un gain de temps pour appeler l'autre méthode à partir de la première méthode, si nécessaire, mais encore être en mesure de les appeler separatelly.
Mais à l'intérieur de la classe elle-même, pourquoi devrait-il être difficile de savoir si une méthode existe? Je veux dire soit est déclarés/mis en œuvre dans la classe ou on ne l'est pas. Comment et pourquoi en changer au moment de l'exécution? Je dirais que vous savez exactement si la méthode existe.
Parce que
$action
pouvez recevoir un nom de méthode qui n'existe pas.Ah, vous spécifiez une méthode en s'en remettant son nom à la chaîne. En effet, très laid et l'insécurité...
OriginalL'auteur Rafael | 2015-11-26
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire quelque chose comme ceci:
OriginalL'auteur Rajdeep Paul
À l'aide de
method_exists
est correct. Cependant, si vous souhaitez de se conformer à l'Interface de la Ségrégation Principe", vous allez créer une interface pour faire de l'introspection contre, comme suit:N'avez-vous pas l'amour de la programmation orientée objet.
Je commençais à, mais vous avez tué @Flosculus
je savais juste que PHP possède une interface et vous pouvez la mettre en œuvre. la pensée que nous pouvons le faire qu'en java lol. merci mec
OriginalL'auteur Flosculus
La meilleure façon à mon avis est d'utiliser __appel de méthode magique.
Oui, vous pouvez utiliser method_exists($this ...) mais c'est l'interne de PHP.
OriginalL'auteur Jeliu Jelev
method_exists()
accepte soit un nom de classe ou d'instance de l'objet en tant que paramètre. Ainsi, vous pouvez vérifier contre$this
http://php.net/manual/en/function.method-exists.php
mettant en évidence la partie la plus intéressante ci-dessus pour vous
Ow, (visage dans le sol), désolé =p
OriginalL'auteur Calimero