Venant de l'arrière-plan C ++;)
Comment puis-je surcharger les fonctions PHP?
Une définition de fonction s'il y a des arguments, et une autre s'il n'y a pas d'arguments? Est-ce possible en PHP? Ou dois-je utiliser if else pour vérifier si des paramètres sont passés de $ _GET et POST ?? et les relier?
php
arguments
overloading
Vamsi Krishna B
la source
la source
overloading
est demandé dans la question. (Voir la réponse acceptée pour plus de détails.)Réponses:
Vous ne pouvez pas surcharger les fonctions PHP. Les signatures de fonction sont basées uniquement sur leurs noms et n'incluent pas de listes d'arguments, vous ne pouvez donc pas avoir deux fonctions avec le même nom. La surcharge des méthodes de classe est différente en PHP que dans de nombreux autres langages. PHP utilise le même mot mais il décrit un modèle différent.
Vous pouvez cependant déclarer une fonction variadique qui accepte un nombre variable d'arguments. Vous utiliseriez
func_num_args()
etfunc_get_arg()
pour faire passer les arguments, et les utiliser normalement.Par exemple:
la source
myFunc(/*...*/)
.PHP ne prend pas en charge la surcharge de méthode traditionnelle, mais une façon dont vous pourriez être en mesure de réaliser ce que vous voulez, serait d'utiliser la
__call
méthode magique:la source
__call()
auparavant. Assez créatif (si un peu bavard)! +1Pour surcharger une fonction, passez simplement le paramètre à null par défaut,
la source
overload
une fonction - néanmoins, vous faites un point utile que les lecteurs doivent connaître.Cela peut être hack pour certains, mais j'ai appris de cette façon de la façon dont Cakephp fait certaines fonctions et je l'ai adapté parce que j'aime la flexibilité qu'il crée
L'idée est que vous avez différents types d'arguments, de tableaux, d'objets, etc., puis vous détectez ce qui vous a été transmis et allez à partir de là
la source
la source
Et ça:
la source
En PHP 5.6, vous pouvez utiliser l' opérateur splat
...
comme dernier paramètre et supprimerfunc_get_args()
etfunc_num_args()
:Vous pouvez également l'utiliser pour décompresser les arguments:
Est équivalent à:
la source
la source
PHP ne prend pas en charge la surcharge pour l'instant. J'espère que cela sera implémenté dans les autres versions comme les autres langages de programmation.
Consultez cette bibliothèque, cela vous permettra d'utiliser la surcharge PHP en termes de fermetures. https://github.com/Sahil-Gulati/Overloading
la source
Malheureusement, il n'y a pas de surcharge en PHP comme cela se fait en C #. Mais j'ai un petit truc. Je déclare des arguments avec des valeurs nulles par défaut et les vérifie dans une fonction. De cette façon, ma fonction peut faire différentes choses en fonction des arguments. Voici un exemple simple:
la source