2011-12-18 5 views
9

J'ai une variable comme $string = "blah";Comment créer une fonction dynamiquement?

Comment est-ce que je peux créer une fonction qui a la valeur de variable comme nom? Est-ce possible en PHP?

Comme function $string($args){ ... } ou quelque chose, et être capable de l'appeler comme:

blah($args); 
+0

Vous cherchez [Fonctions anonymes] (http://php.net/manual/en/functions.anonymous.php)? – Indranil

+6

Mauvaise idée. Qu'est-ce que vous * essayez * vraiment de faire? –

+0

non non, j'ai besoin que le nom soit disponible par le même code :) – Alex

Répondre

9

Cela ne ressemble pas à un grand choix de conception, il pourrait être utile de repenser, mais ...

Si vous utilisez PHP 5.3, vous pouvez utiliser une fonction anonyme.

<?php 
$functionName = "doStuff"; 
$$functionName = function($args) { 
    // Do stuff 
}; 

$args = array(); 
$doStuff($args); 
?> 
+2

Techniquement, cela ne définit pas une fonction, mais une fermeture.Essayez 'get_defined_functions() ['user']' et 'get_defined_vars()' pour voir la différence. – jameshfisher

+0

@jameshfisher Les "fermetures" de PHP sont aussi appelées [fonctions *** anonymes ***] (http://php.net/manual/fr/functions.anonymous.php), et le mot-clé 'function' est utilisé dans la syntaxe. Bien sûr, cela ne définit pas une * fonction nommée *, mais je pense que cela va au-delà de la pédanterie au point de déraisonnable de dire qu'elle ne définit pas du tout une «fonction». –

+0

@MarkAmery Les "fonctions" et les "vars" de PHP se trouvent dans des espaces de noms différents. Ils sont fondamentalement différents. C'est un problème sémantique, pas un problème syntaxique. – jameshfisher

10

cela pourrait ne pas être une bonne idée, mais vous pouvez faire quelque chose comme ceci:

$string = "blah"; 
$args = "args" 
$string = 'function ' . $string . "({$args}) { ... }"; 
eval($string); 
+11

Non! Tout simplement non! :) – PeeHaa

+0

hmm intéressant, cela devrait fonctionner, je n'ai pas pensé à cela: D – Alex

+4

Cela devrait être la réponse acceptée. C'est la seule solution ici qui définit une fonction, pas une fermeture. Essayez 'get_defined_functions() ['user']' et 'get_defined_vars()' pour voir la différence. – jameshfisher

1

Vous pouvez appeler une fonction par son nom stockée dans une variable, et vous pouvez également assigner une fonction aux variables et l'appeler en utilisant la variable. Si ce n'est pas ce que vous voulez, s'il vous plaît expliquer plus.

+2

Cette réponse aurait été géniale comme commentaire :) – PeeHaa

Questions connexes