Comment faire une closure en PHP

Publié le 1 Février 2015

Depuis la version 5.3 de PHP il est possible d'écrire des fonctions anonymes ou lambda.

Par exemple imaginons le calcul "simplifié" du montant d'un panier:

$panier = array(
   "Learning PHP, MySQL & JavaScript: With jQuery, CSS & HTML5" => 35.50,
   "PHP and MySQL Web Development (4th Edition)" => 25.50,
   "PHP and MySQL for Dynamic Web Sites" => 30.00
);

function total() {
   $total = 0.0;
   array_walk($panier, function ($prix, $produit) use (&$total) {
      $total += $price;
   });
   return $total;
}

Ce qu'il faut remarquer ici c'est que la closure sur les variables présentes dans le scope où est déclarée la fonction ne se fait pas automatiquement.

Il faut spécifier explicitement les variables que l'on veut utiliser à l'aide du mot-clé 'use'.

Ensuite comme en PHP toute les valeurs sont passées par copies par défaut il faut spécifier explicitement que $total doit être passer par référence pour pouvoir la modifier depuis la lambda.

Rédigé par Bliz

Publié dans #Php

Repost 0
Commenter cet article