Frage Umfang der deklarierten Funktion innerhalb einer Funktion


Ich habe mich gefragt, warum php den Gültigkeitsbereich einer deklarierten Funktion innerhalb einer Funktion anders behandelt, wenn eine Funktion innerhalb einer Klassenfunktion deklariert wird.

Beispielsweise:

function test() // global function
{
  function myTest() // global function. Why?
  {
    print( "Hello world" );
  } 
}

class CMyTestClass
{
  public function test() // method of CMyTestClass
  {
    function myTest() // This declaration will be global! Why?
    {
      print( "Hello world" );
    } 
  }
}

}

Kann mir das jemand erklären, warum das passiert? Vielen Dank für Ihre Antwort.

Greetz.


15
2018-01-20 13:50


Ursprung


Antworten:


In PHP sind alle Funktionen immer global, egal wie oder wann Sie sie definieren. (Anonyme Funktionen stellen teilweise eine Ausnahme dar.) Beide Funktionsdefinitionen sind somit global.

Aus der Dokumentation:

Alle Funktionen und Klassen in PHP haben den globalen Geltungsbereich - sie können sogar außerhalb einer Funktion aufgerufen werden   wenn sie innerhalb definiert wurden und umgekehrt.


11
2018-01-20 14:00



Wenn Sie eine Funktion in einer anderen Funktion definieren, existiert sie nicht   bis die Elternfunktion ausgeführt wird. Sobald die Elternfunktion funktioniert   ausgeführt wurde, ist die geschachtelte Funktion definiert und wie bei allen   Funktion, von überall im aktuellen Dokument zugänglich. Wenn du   Haben Sie geschachtelte Funktionen in Ihrem Code, können Sie nur die äußere ausführen   einmal funktionieren. Wiederholte Anrufe versuchen, das Innere neu zu deklarieren   Funktionen, die einen Fehler erzeugen.

Jetzt sind alle PHP-Funktionen standardmäßig global. Ihre verschachtelte Funktion wird also in der Sekunde, in der Sie die äußere Funktion aufrufen, global


2
2018-01-20 14:04