Je voudrais savoir si c'est une bonne chose de définir une fonction dans une autre fonction en PHP. N'est-il pas préférable de le définir avant la fonction (et non à l'intérieur) en termes de performances.PHP - Fonction à l'intérieur d'une fonction. Bon ou Mauvais?
Répondre
Je pense que vous devriez vous intéresser davantage à la maintenabilité, et moins aux performances, surtout dans ce genre de situation où la différence de performances n'est probablement pas grande entre les deux solutions, alors que la différence de maintenance semble importante.
Comme Donald Knuth dit:
Nous devons oublier les petits efficacité, dire environ 97% du temps : optimisation prématurée est la racine de tous les maux .
C'est tout à fait vrai, dans cette situation ;-)
C'est une mauvaise pratique. Non seulement toutes les choses étranges peuvent arriver et vous perdrez trop de temps à essayer de le déboguer, mais le code devient plus confus.
En termes de performance, je ne suis pas complètement sûr à ce sujet. Tout ce que je sais, c'est que si vous définissez une fonction dans une autre, cette dernière fonction n'existera que si la fonction externe est appelée. Cela peut soulager un peu de mémoire. Mais je crois que le gain n'est pas significatif.
Une manière très courante est de définir la fonction en dehors de cette fonction et de l'appeler à l'intérieur.
Cela dépend de la situation, car il peut être plus souhaitable que d'utiliser create_function()
. Cependant, vous devez savoir que la fonction créée dans la fonction est globale.
function creator() {
function inside() {
echo "hi.";
}
}
creator();
inside();
Ceci affichera "salut". même si la fonction inside()
a été créée "inside" de la fonction de création. Donc, si vous avez une fonction dans une boucle qui crée une fonction, vous devez vérifier si la fonction existe, sinon cela provoquera une erreur function exists
après la première boucle.
Il y a plusieurs raisons qui militent contre elle:
- La documentation de la fonction intérieure ne sera pas analysée.
- La fonction intérieure existe seulement après la fonction externe a été appelé (mais même en dehors du cadre de la fonction externe par la suite)
- Il est difficile de lire (parce qu'il ne se voit pas souvent)
- Le seul avantage I pourrait penser est la définition d'un rappel, mais cela est mieux fait avec
create_function()
(<PHP 5.3
) ou closures (>=PHP5.3
) - Si vous êtes préoccupé par la performance à ce niveau, vous devriez vraiment utiliser une autre langue
- 1. Combinaison Java PHP pour le traitement multithread - bon ou mauvais?
- 2. Fonction MKTime retournant un mauvais temps?
- 3. PHP appelle une fonction à partir d'une fonction
- 4. Entity Framework: ObjectContext Singletonish - Bon, mauvais ou Overthinking?
- 5. WCF Auto-hébergement sur le client? Bon ou mauvais
- 6. PHP - getimagesize Fonction
- 7. dateheure fonction dans php
- 8. PHP Mathématiques équation Fonction
- 9. Fonction PHP Mail() échouant
- 10. PHP Fonction pt_register
- 11. fonction PHP confusion
- 12. Extraction de PHP() Fonction
- 13. Fonction JavaScript de PHP
- 14. Les bibliothèques d'amélioration de la fonction PHP destinées à php
- 15. Fonction PHP et héritage variable
- 16. Aide PHP/SQL avec fonction
- 17. La fonction gzuncompress de PHP en Java?
- 18. PHP Toujours exécuter la fonction
- 19. fonction texte Remplacement en php
- 20. Fonction PHP crypt() dans .Net?
- 21. comment écrire la fonction php
- 22. fonction PHP imagettftext() et unicode
- 23. Un simple `return` dans une fonction PHP termine-t-il prématurément la fonction?
- 24. fonction de disponibilité de domaine php
- 25. Passage direct des arguments d'une fonction à une autre fonction
- 26. l'ajout d'une fonction à php.ini
- 27. Accéder à une valeur de fonction javascript dans PHP?
- 28. fonction php pour diviser un tableau à chaque ligne vide?
- 29. Alternatives à la fonction d'en-tête de PHP
- 30. killSession() Fonction PHP à l'intérieur de $ (fenêtre) .unload
+ 1. Couvre le même territoire que toutes les autres réponses réunies et le fait de manière concise. –