Anonyme Funktion Rückgabewert
Update: Beginnend mit PHP7, es ist jetzt möglich, eine anonyme Funktion zu dereferenzieren verwenden Sie die syntax:
$array[] = [
'new' => (function()
{
...
return mt_rand();
})(),
'or' => getClosure()()
]
Original-Beitrag: ich habe mir vor kurzem das Experimentieren mit einigen Dingen, und fragte sich, ob es irgendeinen Weg zu benutzen, den Rückgabewert einer anonymen Funktion
Können sagen, ich hatte eine for-Schleife, die aus einem array mit jedem Wert des Arrays hatte, um eine Datenbank nennen, etwas, was ich gerne tun würde, ist:
for($i = 0; $i != 10; $i++)
{
$array[] = [
'new' => function(){
//some proccesing here maybe
//lets use mt_rand for this example.
return mt_rand();
},
'old' => function(){
return mt_rand();
}
];
}
oder vielleicht
echo function(){
//again, we'll just use mt_rand
return mt_rand();
};
Diese beide geben ein closure
Klasse. Ist es irgendwie tatsächlich übergeben Sie den Rückgabewert zurück an den array-oder echo, für die Beispiele oben?
Update: ich habe festgestellt haben, ist dies nicht möglich, so feature-request können hier gefunden werden: http://bugs.php.net/bug.php?id=64608
- Brauchen Sie wirklich eine anonyme Funktion? Klingt wie Sie brauchen eine regelmäßige und nenne es einfach innerhalb der Schleife
- Hängt davon ab, welche php-version du hast... ich glaube, dass php 5.4 in der Lage sein könnte, dies zu tun, aber Server, auf denen ältere Pakete (z.B. Debian Squeeze ich weiß, läuft php 5.3) nicht.
- meine Beispiele wurden getestet auf PHP 5.4.13
- Anonyme Funktionen stehen ab PHP 5.3
- Ich habe festgestellt, dieses ist nicht möglich, also feature-request können hier gefunden werden: bugs.php.net/bug.php?id=64608
- Sie definieren möchten, und sofort führen Sie eine anonyme Funktion. Während das ticket, das Sie gefunden, die besagt, dass dies derzeit unmöglich ist, Frage ich mich, ob es gibt viele Gelegenheiten diese zu verwenden. Die Art und Weise, Sie formuliert Ihre Frage suggerieren, dass es unmöglich ist - was nicht der Fall ist. Ihre Schleife füllt ein array mit einer Anzahl von anonymen Funktionen. Warum sollten die auf einmal ausgeführt? Vielleicht könnte es eine sehr gute Idee nur ausführen, wenn nötig.
- Sie müssen ausgeführt werden, gleichzeitig zu arbeiten mit einem template-system.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfachste Lösung bisher:
Versuchen, die Zuordnung der anonymen
function
einer Variablen.Wird der Wert der Funktion selbst ist nicht die Rückkehr Wert. Der Rückgabewert ist der Wert von der Funktion zurückgegeben, wenn die Funktion
called
.Edit:
Vorgeschlagen von deceze, die Sie verwenden können,
call_user_func()
. Ein anderer Weg, das zu erreichen, was Sie wollen, ist zu machen verwendet php ' seval()
, was keineswegs eine gute Codierung der Praxis.eval()
$myFunc
, nicht$myFunc()
.eval
ist ungefähr die schlechteste Lösung.Verschluss zu haben scheint, zugeordnet werden, bevor es de-referenziert wird Versuchen, diesen folgenden code:
[Bearbeiten] - Modifiziert, dass call_user_func() anstelle von custom-Funktion - doh!
Müssen Sie die Zuordnung der Funktion zu einer var, schauen Sie hier
Dieser Arbeit
oder
$a = function(){ return mt_rand(); }();
funktioniert nicht.