2012-06-18 13 views
24
function parts($part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($tructure . $part . '.php'); 
} 

Diese Funktion eine Variable $site_url verwendet, die am Anfang der Seite definiert wurden, aber diese Variable nicht in die Funktion übergeben wird.PHP Funktion Verwendung variabel von außen

Wie erhalten wir es in der Funktion zurückzugeben?

Antwort

51

In zweiter Parameter

Sie benötigen zusätzliche Parameter an die Funktion übergeben:

function parts($site_url, $part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

Bei Schließungen

Wenn Sie lieber Verschlüsse verwenden würde, dann können Sie Variable in den aktuellen Gültigkeitsbereich importieren (das Schlüsselwort use):

$parts = function($part) use ($site_url) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

global - eine schlechte Praxis

Dieser Beitrag häufig gelesen wird, so muss etwas über global geklärt werden. Es wird als eine schlechte Praxis betrachtet (siehe this und this).

Für die Vollständigkeit halber hier wird die Lösung mit global:

function parts($part) { 
    global $site_url; 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($structure . $part . '.php'); 
} 

Es funktioniert, weil Sie Dolmetscher sagen, dass Sie eine globale Variable verwenden möchten, ist es jetzt denkt es ist eine lokale Variable (innerhalb deine Funktion).

nachlesen:

0

Einfach in der Funktion: global $ site_url;

34

Alternativ können Sie Variablen aus dem Außenbereich mitschließen, indem Sie Verschlüsse mit dem Schlüsselwort use verwenden.

$myVar = "foo"; 
$myFunction = function($arg1, $arg2) use ($myVar) 
{ 
return $arg1 . $myVar . $arg2; 
}; 
+1

Dieser Weg ist ein wenig schwierig, zum Beispiel, wenn Sie 10 Variable haben, wird dieser Weg hart sein. – M98

+1

php zeigt Fehler, warum? Parse-Fehler: Syntaxfehler, unerwartete 'Verwendung' (T_USE), erwartet '{' – M98

+1

@Kermani Sie verwenden wahrscheinlich eine ältere Version von PHP, die nicht die 'use'-Syntax hat. Diese Syntax wurde in PHP5.3 eingeführt. Siehe https://wiki.php.net/rfc/closures –

Verwandte Themen