2015-04-28 15 views
6

Ich versuche, einige verschachtelte PHP-Anonymus-Funktionen zu schreiben, die Struktur ist die, die Sie unten sehen, und meine Frage ist: Wie kann ich es ohne Fehler arbeiten lassen?Verschachtelte anonyme Funktionen

$abc = function($code){ 

    $function_A = function($code){ 
     return $code; 
    }; 

    $function_B = function($code){ 
     global $function_A; 
     $text = $function_A($code); 
     return $text; 
    }; 

    $function_B($code); 

}; 

echo $abc('abc'); 

Der Ausgang ist Fatal error: Funktionsname ein String in dieser Linie sein muss:

$text = $function_A($code); 

Diese Meldung sagt nichts zu mir :(

+1

'$ function_A' ist nicht im globalen Bereich definiert. – AbraCadaver

+1

'$ function_A' wird im lokalen Variablenbereich der äußeren Funktion definiert, nicht als global. Siehe auch [Referenz: Was ist der Variablenbereich, auf welche Variablen kann von wo zugegriffen werden und was sind "undefinierte Variable" Fehler?] (Http://stackoverflow.com/q/16959576) – mario

Antwort

10

Die Sache hier ist, dass Ihre $function_A nicht im globalen Gültigkeitsbereich definiert ist, sondern im Gültigkeitsbereich $abc. Wenn Sie möchten, können Sie versuchen, use zu verwenden, um Ihre $function_A an den Gültigkeitsbereich Ihrerzu übergeben:

$abc = function($code){ 

    $function_A = function($code){ 
     return $code; 
    }; 

    $function_B = function($code) use ($function_A){ 
     $text = $function_A($code); 
     return $text; 
    }; 

    $function_B($code); 

}; 
2

In PHP, passieren andere Variablen als $this und superglobals in eine anonyme Schließung Sie die use Anweisung verwenden.

<?php 

$abc = function($code){ 

    $function_A = function($code){ 
     return "Code: {$code}"; 
    }; 

    $function_B = function($code) use ($function_A) { 
     $text = $function_A($code); 
     return $text; 
    }; 

    return $function_B($code); 
}; 

echo $abc('abc'); 

Hier ist ein funktionierendes Beispiel: http://3v4l.org/u1CtZ

Verwandte Themen