17 Stimmen

PHP: Variable funktioniert nicht innerhalb einer Funktion?

echo $path; //working
function createList($retval) {
    echo $path; //not working
    print "<form method='POST' action='' enctype='multipart/form-data'>";
    foreach ($retval as $value) {
            print "<input type='checkbox' name='deletefiles[]' id='$value' value='$value'>$value<br>";
    }
    print "<input class='submit' name='deleteBtn' type='submit' value='Datei(en) löschen'>";
    print "</form>";    
}

Was mache ich falsch? Warum wird $path korrekt außerhalb der createList Funktion, aber sie ist innerhalb der Funktion nicht zugänglich?

52voto

Joshua Pinter Punkte 41335

Weil sie nicht in der Funktion definiert ist.

Hierfür gibt es mehrere Möglichkeiten:

1) Verwenden Sie, was Alex sagte, indem Sie der Funktion mitteilen, dass es sich um eine globale Variable handelt:

echo $path; // working

function createList($retval) {
  global $path;

  echo $path; // working
}

2) Definieren Sie ihn als Konstante:

define(PATH, "/my/test/path"); // You can put this in an include file as well.

echo PATH; // working

function createList($retval) {
  echo PATH; // working
}

3) Übergeben Sie es an die Funktion, wenn es für diese Funktion spezifisch ist:

echo $path; // working

function createList($retval, $path) {
  echo $path; // working
}

Wenn man bedenkt, wie die Funktion wirklich funktioniert, reicht eine davon aus.

10voto

Alex Ciminian Punkte 11067

Wenn Sie wollen, dass es funktioniert, sollten Sie global $path in der Funktion, so dass es außerhalb des Funktionsbereichs sucht.

Bitte beachten Sie, dass globale Variablen aus der Hölle geschickt werden :).

2voto

Crozin Punkte 42878

Ursache $path innerhalb createList() und außerhalb davon (im globalen Bereich) sind zwei verschiedene Variablen. Mehr lesen über Variablenumfang in PHP .

1voto

Aif Punkte 10605

Müssen Sie den globalen Modifikator verwenden.

echo $path;
function createList($retval) {
    global path;
    echo $path; // works now :)

0voto

thetaiko Punkte 7748

Als Alternative zur Verwendung einer globalen Variablen können Sie auch einfach $path in. Wenn Sie die Variable innerhalb der Funktion nicht benötigen, brauchen Sie sich natürlich nicht darum zu kümmern!

echo $path;
function createList($retval, $path) {
    echo $path;
    print "<form method='POST' action='' enctype='multipart/form-data'>";
    foreach ($retval as $value) {
            print "<input type='checkbox' name='deletefiles[]' id='$value' value='$value'>$value<br>";
    }
    print "<input class='submit' name='deleteBtn' type='submit' value='Datei(en) löschen'>";
    print "</form>";    
}

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