SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=146&group=26
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Verschachtelte Funktionen


Sie haben bereits erfahren, dass Sie in PHP Kontrollstrukturen verschachteln können. Das gilt auch für Funktionen. Im folgenden Beispiel wird eine Funktion zeigeAutoren() definiert. Sie enthält zwei weitere Funktionen zeigeAutor() und zeigeAutorin().

Beispiel

<?php
// Verschachtelte Funktionen
function zeigeAutoren() {
  function zeigeAutor() {
    echo "Matthias Kannengiesser";
  }
  function zeigeAutorin() {
    echo "Caroline Kannengiesser";
  }
  zeigeAutor();
  zeigeAutorin();
}
// Aufruf
zeigeAutoren();
?>

Ausgabe
Matthias Kannengiesser
Caroline Kannengiesser

Sie greifen, wie Sie sehen, auf die verschachtelte Funktion zu, indem Sie die übergeordnete Funktion zeigeAutoren() aufrufen. Hierbei verhalten sich die verschachtelten Funktionen wie lokale Variablen. Sie sind somit nur für die übergeordnete Funktion zugänglich (Parent-Funktion). Folgender Aufruf wäre daher außerhalb der Parent-Funktion nicht möglich:
// Aufruf (nicht möglich)
zeigeAutor();

Tipp: Mithilfe der verschachtelten Funktionen haben Sie die Möglichkeit, den Zugriff von außen auszuschließen.

Sonderfall: Aufruf von Parent- und anschließend Child-Funktion

An dieser Stelle würde ich gerne noch auf einen Sonderfall hinweisen, den Sie bei der Programmierung berücksichtigen sollten.

<?php
function zeigeAutoren()
{
  function zeigeAutor()
  {
    echo "Matthias Kannengiesser";
  }
  function zeigeAutorin()
  {
    echo "Caroline Kannengiesser";
  }
  zeigeAutor();
  zeigeAutorin();
}

// Aufruf der Parent-Funktion
zeigeAutoren();

// Anschließend kann auch auf die Child-Funktionen
// (untergeordneten Funktionen) außerhalb zugegriffen
// werden!
//
// Dies setzt jedoch voraus, dass die Parent-Funktion
// mindestens einmal vorab aufgerufen wurde!!!
zeigeAutor();
zeigeAutorin();
?>

Da vorab die Parent-Funktion aufgerufen wurde, steht dem PHP-Intepreter nun auch der direkte Zugriff auf die Child-Funktionen zur Verfügung. Schließlich befinden sich diese ja immer noch im Speicher und sind durch den Aufruf der Parent-Funktion nun auch außerhalb abrufbar.

Hinweis: Eine solche Anwendung, direkt nach dem Aufruf der Parent-Funktion außerhalb der Funktion auf die Child-Funktionen zuzugreifen, kommt jedoch äußerst selten vor. Die Verschachtelung soll schließlich genau so etwas vermeiden, um beispielsweise Programmabläufe besser von einander unterscheiden zu können und abzugrenzen. Es liegt jedoch immer auch beim Entwickler, wie die Entscheidung aussieht!