2012-07-10 16 views
65

Grałem z anonimowymi funkcjami w PHP i zdałem sobie sprawę, że nie docierają do zmiennych poza nimi. Czy istnieje sposób na obejście tego problemu?Zmienne php w anonimowych funkcjach

Przykład:

$variable = "nothing"; 

functionName(someArgument, function() { 
    $variable = "something"; 
}); 

echo $variable; 

wyświetli: "nic". Czy jest jakiś sposób, że anonimowa funkcja może uzyskać dostęp do zmiennej $?

Odpowiedz

168

Tak, use a closure:

functionName(someArgument, function() use(&$variable) { 
    $variable = "something"; 
}); 

Należy zauważyć, że w celu, aby móc modyfikować $variable i odzyskać zmodyfikowaną wartość spoza zakresu funkcji anonimowej, należy odwoływać się zamknięcie za pomocą & .

+1

Awesome! Nigdy wcześniej tego nie widziałem .. =) – einord

+0

Jest nowy! Jest to składnia, która jest nowa w PHP 5.3. –

+1

@Rocket Więc, prawdę mówiąc, jest to prawdziwa anonimowa składnia funkcji (w przeciwieństwie do 'create_function()') i słowo kluczowe 'use' jest udokumentowane (źle) na [tej samej stronie dokumentu] (http: // php. net/manual/en/functions.anonymous.php), który je opisuje. – DaveRandom