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.
Réponses
Trop de publicités?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.
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.