2012-03-03 20 views
5

Chcę mieć funkcję napisaną w PHP, która może tworzyć anonimowe funkcje, które ~ 5 parametrów i zwracają je, dzięki czemu mogę przechowywać je w tablicy klucz/wartość i wywoływać je później bez wiedzy o podanych parametrach i więcej niż raz.Powróć anonimowe funkcje

E.g.

$fun(); 

Jak uzyskać później połączenie zwrotne i wielokrotnego użytku?

Z góry dziękuję.

+0

masz na myśli funkcję statyczną lub funkcję dynamiczną? to może pomóc http://php.net/manual/en/function.create-function.php –

+0

potrzebujesz zamknięć PHP5.3 –

+0

Tak. Mam dobrą zabawę, taką jak $ fun = funkcja ($ p1, $ p2, $ p3 ..) { magiczne rzeczy; }; I chcę się pozbyć połączenia z $ fun ("foo", "bar", "bazz"); więc chcę funkcji do tworzenia funkcji, takich jak jest w erlang, które można nazwać za pomocą $ short(); – reindeer

Odpowiedz

11

Masz na myśli coś takiego?

<?php 
function setData($user, $pass, $host){ 
    return function() use ($user, $pass, $host){ 
    return array($user, $pass, $host); 
    }; 
} 

//set the data once 
$container = setData('test', 'password', 'localhost'); 
//use the function without passing the data again (and it should be noted, you 
//can't set the data again) 
var_dump($container()); 

a wyjście:

 
array(3) { 
    [0]=> 
    string(4) "test" 
    [1]=> 
    string(8) "password" 
    [2]=> 
    string(9) "localhost" 
} 

Nie pewny swojego przypadku użycia, ale na moim przykładzie wyjście z funkcji może być sformatowany DNS, jak również proste tablice.

Jak wspomniano w innym miejscu, func_get_args spowodowałoby to działanie z dowolną liczbą argumentów.

+0

Myślę, że to jest to i phpunit mówi, że to też działa! Dzięki za szybką i dopasowaną odpowiedź;) – reindeer

+0

Czy możesz uruchomić anonimową funkcję bez zapisywania jej do zmiennej? tj. 'setData ('test', 'password', 'localhost')()'? – tgun926