92 Stimmen

Gibt meiner Funktion Zugriff auf externe Variable

Ich habe ein Array außerhalb:

$myArr = array();

Ich möchte meiner Funktion Zugriff auf das Array außerhalb geben, damit sie Werte hinzufügen kann

function someFuntion(){
    $myVal = //Hier erfolgt eine Verarbeitung, um den Wert von $myVal zu bestimmen
    $myArr[] = $myVal;
}

Wie gebe ich der Funktion den richtigen Gültigkeitsbereich für die Variable?

142voto

Pascal MARTIN Punkte 384469

Standardmäßig haben Sie innerhalb einer Funktion keinen Zugriff auf die äußeren Variablen.

Wenn Sie möchten, dass Ihre Funktion auf eine äußere Variable zugreifen kann, müssen Sie sie innerhalb der Funktion als global deklarieren :

function someFuntion(){
    global $myArr;
    $myVal = //hier Verarbeitung, um Wert von $myVal zu bestimmen
    $myArr[] = $myVal;
}

Weitere Informationen finden Sie unter Variablenbereich.

Aber beachten Sie, dass die Verwendung von globalen Variablen keine gute Praxis ist : dadurch ist Ihre Funktion nicht mehr unabhängig.

Eine bessere Idee wäre es, Ihre Funktion das Ergebnis zurückgeben zu lassen :

function someFuntion(){
    $myArr = array();       // Am Anfang haben Sie ein leeres Array
    $myVal = //hier Verarbeitung, um Wert von $myVal zu bestimmen
    $myArr[] = $myVal;      // Füge $myVal in das Array ein
    return $myArr;
}

Rufen Sie die Funktion wie folgt auf :

$result = someFunction();

Ihre Funktion könnte auch Parameter entgegennehmen und sogar mit einem per Referenz übergebenen Parameter arbeiten :

function someFuntion(array & $myArr){
    $myVal = //hier Verarbeitung, um Wert von $myVal zu bestimmen
    $myArr[] = $myVal;      // Füge $myVal in das Array ein
}

Rufen Sie die Funktion dann wie folgt auf :

$myArr = array( ... );
someFunction($myArr);  // Die Funktion erhält $myArr und ändert es

Dabei :

  • Ihre Funktion erhielt das externe Array als Parameter
  • Und kann es ändern, da es als Referenz übergeben wird.
  • Und es ist eine bessere Praxis als die Verwendung einer globalen Variablen : Ihre Funktion ist eine Einheit, unabhängig von externem Code.

Für weitere Informationen sollten Sie den Abschnitt Funktionen im PHP-Handbuch lesen und insbesondere die folgenden Unterabschnitte :

31voto

Maxwell s.c Punkte 1378
$foo = 42;
$bar = function($x = 0) use ($foo){
    return $x + $foo;
};
var_dump($bar(10)); // int(52)

UPDATE: Es gibt jetzt Unterstützung für Pfeilfunktionen, aber ich lasse es jemandem überlassen, der es häufiger verwendet hat, um die Antwort zu erstellen

12voto

Tyler Carter Punkte 58971
Global $myArr;
$myArr = array();

function someFuntion(){
    global $myArr;

    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

Sei gewarnt, im Allgemeinen meiden die Leute globale Variablen, da sie einige Nachteile haben.

Du könntest das hier versuchen

function someFuntion($myArr){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
    return $myArr;
}
$myArr = someFunction($myArr);

Dadurch müsstest du dich nicht auf Globale verlassen.

9voto

Amy B Punkte 17616
$myArr = array();

function someFuntion(array $myArr) {
    $myVal = //Hier wird etwas verarbeitet, um den Wert von $myVal zu bestimmen
    $myArr[] = $myVal;

    return $myArr;
}

$myArr = someFunction($myArr);

3voto

lamas Punkte 4458

Der eine und wahrscheinlich nicht so gute Weg, um Ihr Ziel zu erreichen, wäre die Verwendung von globalen Variablen.

Sie könnten das erreichen, indem Sie global $myArr; an den Anfang Ihrer Funktion hinzufügen. Beachten Sie jedoch, dass die Verwendung globaler Variablen in den meisten Fällen keine gute Idee ist und wahrscheinlich vermieden werden sollte.

Der viel bessere Weg wäre, Ihr Array als Argument an Ihre Funktion zu übergeben:

function someFuntion($arr){
    $myVal = // hier irgendeine Verarbeitung, um den Wert von $myVal zu bestimmen
    $arr[] = $myVal;
    return $arr;
}

$myArr = someFunction($myArr);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X