46 votes

Pourquoi utiliser la fonction anonyme?

Double Possible:
Comment utiliser les fonctions anonymes en PHP?

Pourquoi devrais-je utiliser une fonction anonyme? Je veux dire, quelle est la vraie affaire, de les utiliser? Je n'ai pas vraiment cela. Je veux dire, vous utilisez la fonction pour rendre le code plus propre ou pour l'utiliser plus d'une fois. Mais les fonctions Anonymes, il suffit de ne pas le faire ni le premier, ni le second. J'ai googlé et je ne pouvais pas trouver quelqu'un de poser le même problème.

60voto

Andrey Points 36869

Je dirais que les fonctions anonymes montrer leur beauté quand il y a une bonne bibliothèque de classes/fonctions qui les utilisent. Ils ne sont pas sexy par eux-mêmes. Dans le monde de la .net, il existe une technologie appelée LINQ qui rend d'énormes utilisation de alors dans de très idiomatiques manière. Maintenant, revenons à PHP.

Premier exemple, le tri:

uasort($array, function($a, $b) { return($a > $b); });

Vous pouvez spécifier une logique complexe pour le tri:

uasort($array, function($a, $b) { return($a->Age > $b->Age); });

Un autre exemple:

$data = array( 
        array('id' => 1, 'name' => 'Bob', 'position' => 'Clerk'), 
        array('id' => 2, 'name' => 'Alan', 'position' => 'Manager'), 
        array('id' => 3, 'name' => 'James', 'position' => 'Director') 
); 

$names = array_map( 
        function($person) { return $person['name']; }, 
        $data 
);

Vous voir comment bien vous pouvez produire tableau de noms.

Dernière:

array_reduce(
   array_filter($array, function($val) { return $val % 2 == 0; },
   function($reduced, $value) { return $reduced*$value; }
)

Il calcule le produit de deux nombres pairs.

Une certaine philosophie. Quelle est la fonction? Une unité de fonctionnalités qui peuvent être invoqués et de l'unité de la réutilisation de code. Parfois, vous avez besoin seulement de la première partie: la capacité d'invoquer et de faire des actions, mais vous ne voulez pas le réutiliser à tous et même de le rendre visible aux autres parties de code. C'est ce que les fonctions anonymes font essentiellement.

21voto

netcoder Points 31874

C'est particulièrement utile pour les rappels:

 array_walk($myArray, function($value, $key) {
   // do something
});
 

7voto

NikiC Points 47270

Vous utilisez normalement des fonctions anonymes pour des fonctions dont vous n’avez besoin qu’une fois. De cette façon, vous ne polluez pas l'espace de noms des fonctions et n'inventez pas de noms de fonctions étranges tels que array_walk_callback1 .

5voto

Mchl Points 32343

La raison la plus évidente est peut-être le recours aux rappels. Prenez la fonction usort() par exemple. Il est inutile d'introduire une fonction d'une ligne, qui sera utilisée une fois et une fois seulement. La fonction anonyme (généralement) convient mieux à cette tâche.

2voto

methodin Points 3994

Il ya des moments où vous DEVEZ utiliser une fonction. Ainsi, les fermetures de garder un code propre en n'ayant pas à remplir vos bibliothèques avec les déclarations de fonction qui ne sont utilisées que dans un seul endroit. Les fermetures sont similaires à l' style="" et les classes CSS. Bien sûr, vous pouvez créer une cargaison de classes pour chaque un seul hors de style que vous avez, ou vous pouvez les intégrer en place puisque vous ne l'utilisez pas ailleurs, et de diminuer la dilatation de vos fichiers CSS.

Ce n'est pas une nécessité, même si, si vous vous sentez le besoin de déclarer explicitement les fonctions vous êtes libres de le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X