Je ne pense pas que vous puissiez faire quelque chose comme ça dans PHP 5.2, malheureusement - mais comme vous utilisez PHP 5.3 ... vous pouvez utiliser des fermetures pour que cela fonctionne.
Pour commencer, voici un exemple rapide d'utilisation d'une fermeture:
function foo()
{
$l = "xyz";
$bar = function() use ($l)
{
var_dump($l);
};
$bar();
}
foo();
afficherons:
string 'xyz' (length=3)
Notez que le mot-clé use
;-)
Et est ici un exemple de comment vous pourriez utiliser cela dans votre cas spécifique:
function compilePath($route)
{
preg_replace_callback('$:([a-z]+)$i', function ($matches) use ($route) {
var_dump($matches, $route);
} , $route['path']);
}
$data = array('path' => 'test:blah');
compilePath($data);
Et vous obtiendrez cette sortie:
array
0 => string ':blah' (length=5)
1 => string 'blah' (length=4)
array
'path' => string 'test:blah' (length=9)
Quelques notes:
- je
preg_replace_callback
, et non preg_replace
- comme je veux une fonction de rappel pour être appelé.
- J'utilise un anonymous function comme rappel
- Et cette fonction anonyme importe
$route
, avec le nouveau mot-clé use
.
- Ce qui signifie que, dans ma fonction de rappel, je peux accéder à la fois les matchs, qui sont toujours passés par
preg_replace_callback
à la fonction de rappel, et la $route
.
Pouvez-vous déclarer des fonctions à l'intérieur des fonctions? Est-ce que PHP supporte les fonctions anonymes? –
@Anthony Ceci est un code PHP parfaitement valide. Cependant, la plupart des gens ne déclarent pas réellement les fonctions dans les fonctions. –
Je vais deviner que vous êtes un programmeur javascript – tzenes