2016-08-02 34 views
1

Ich habe versucht, überall dafür zu suchen, oder vielleicht kann es gerade nicht getan werden?Wie man eine geschachtelte PHP-Funktion dynamisch unter Verwendung der Elternfunktionsparameter definiert

Also ich möchte eine Funktion haben, die verwendet wird, um andere Funktionen zu erstellen, die einen neuen Funktionsnamen basierend auf einem übergebenen Argument haben, ist das überhaupt möglich?

Ich bekomme Funktion immer undefiniert. Können Sie über die Curry-Fähigkeit hinaus die geschachtelte Funktion mit einem Parameter benennen und die geschachtelte Funktion zurückgeben, die später aufgerufen wird (durch den Namen, den Sie im Parameter angegeben haben)?

function maker_of_functions($secFuncName, $foo) { 
    $secFuncName = function($bar) { 
     $fooBar = $foo + $bar; 
    } 
    return $secFuncName(); 
} 

Die später im Code Aufruf:

maker_of_functions('adder', 3); 
echo adder(5); 
+0

hoppla, das ein Tippfehler fixiert bearbeiten war. – Secular12

+0

Wenn Sie currying brauchen - vielleicht suchen Sie das? –

+1

Mögliches Duplikat von [Ist es möglich, Methodenaufrufe in PHP zu curry?] (Http://stackoverflow.com/questions/1609985/is-it-possible-to-curry-method-calls-in-php) –

Antwort

2

Mit Mutterfunktionsparameter

Um eine neue Funktion zu erstellen, die die übergeordnete Funktion params verwendet, können Sie einen Verschluss verwenden:

function maker_of_functions($foo) { 
    // notice the "use" keyword below 
    return function($bar) use ($foo) { 
     return $foo + $bar; 
    }; 
} 

und dann verwenden Sie es:

$adder = maker_of_functions(3); 
echo $adder(5); 

der Funktion

eine Verschluss Naming ist eine anonyme Funktion. Es hat keinen Namen. Es existiert als (denke ich) eine Referenz nur auf eine Funktion, die in einer Variablen enthalten ist. Wenn Sie eine dynamisch benannte Variable möchten, können Sie:

$name = "myNewNamedFunction"; 
$$name = maker_of_functions(3); 

echo $myNewNamedFunction(6); 

Zusätzliche Informationen

+0

Vielen Dank, das wird gut gehen! Funktioniert genau so, wie ich es brauchen würde. – Secular12