2010-10-03 8 views
0

Comment puis-je transmettre une fonction en tant que variable, puis l'appeler en utilisant cette variable?PHP Appel d'une fonction

par exemple.

test(echo); 
function test($function) 
{ 
    $function("Test"); 
} 

Répondre

6

Vous pouvez simplement passer le nom de la fonction sous forme de chaîne et cela fonctionnera.

Notez cependant que echo est et non une fonction, donc cela ne fonctionne pas avec echo.

Edit: Voici un exemple:

function my_function($x) 
{ 
    echo $x; 
} 
function test($function) 
{ 
    $function("Test"); 
} 
test("my_function"); 
+0

Pourriez-vous donner un exemple? – jSherz

3

Vous êtes déjà sur la bonne voie avec variable functions. Mais echo est une construction linguistique et non une fonction:

fonctions variables ne fonctionneront pas avec des constructions de langage tels que echo(), print(), unset(), isset(), empty(), include(), require() et autres. Utiliser les fonctions wrapper pour utiliser l'une de ces constructions comme des fonctions variables.

En outre, la fonction serait soit adoptée par son identifiant:

test('function_name'); 

Ou, en cas d'utilisation anonymous functions, par sa valeur:

test(function() { /* … */ }); 

Vous devez également prendre Regardez is_callable qui peut être utilisé pour tester si le paramètre donné est appelable.

0

Pour une fonction comme, par exemple, substr, vous pouvez appeler une chaîne avec la valeur "substr":

$func = "substr"; 
$result = $func($string, 0, 10); 

Eval peut également être utilisé:

$func = "substr"; 
$result = eval("return $func(\$string, 0, 10);"); 

Procéder avec prudence lors de l'utilisation l'un ou l'autre. Si $ func provient d'une entrée utilisateur, un utilisateur malveillant peut exécuter n'importe quelle fonction. Puisque PHP ne s'en soucie pas trop (émet un avertissement) si vous spécifiez des arguments supplémentaires, quelqu'un pourrait, par exemple, exécuter "exec" avec $ string égal à "rm -rf /".

Vous ne pouvez pas faire cela avec echo, car ce n'est pas une fonction; c'est une construction de langage, comme "si", ou "alors".