Verschachtelte Funktionen

PHP bietet nicht nur die Möglichkeit Funktionen direkt auf Ebene des Hauptprogramms zu definieren. Innerhalb einer Funktion oder Klasse kann der Entwickler munter weitere Funktionen oder auch Klassen definieren. Dabei gilt des folgendes zu Bedenken: Werden auf diesem Wege – innerhalb einer Klasse oder Funktion – Funktionen oder Klassen definiert, so sind diese erst aufrufbar bzw. nutzbar, wenn die Funktion, in der sie definiert werden, bereits mindestens einmal aufgerufen wurde. Was allerdings nicht möglich ist: Einmal definiert kann eine Funktion weder unter gleichem Namen neu definiert noch nachträglich wieder gelöscht werden.

<?php
    // Funktion zur Demonstration von verschachtelten Funktionen
    function parent () {
        // Definition der Funktion child innerhalb von parent
        // Sie wird noch nicht aufgerufen! Es erfolgt lediglich
        // die Definition! Nachdem die Funktion aufgerufen wurde
        // ist die Funktion child von allen Stellen des Scripts
        // aus aufrufbar.
        function child () {
            echo 'Child Aufgerufen!<br>';
        }

        // Und nun die eigentliche Arbeit von Parent machen...
        echo 'Parent aufgerufen!<br>';
    }

    // Gibt es child schon?
    // Hierdurch vermeiden wir, dass eine Funktion aufgerufen wird,
    // die es noch nicht gibt. Wer sich den unvermeidlichen Fehler
    // einfagen möchte, entfernt diesen Block einfach und ersetzt ihn
    // durch einen unbedingten Aufruf von child..
    if (function_exists ('child'))
        // Dann rufen wir die Funktion direkt mal auf
        child ();
    else
        // Ansonsten geben wir das Fehlen zu Protokoll
        echo 'Child existiert noch nicht!<br>';

    // Jetzt wird parent aufgerufen...
    parent ();
    // und nun ist auch child bekannt und kann aufgerufen werden.
    child ();
?>

Child existiert noch nicht!
Parent aufgerufen!
Child Aufgerufen!

Conditional Functions

Unter Conditional Functions versteht man Funktionen, die nur unter bestimmten Umständen definiert werden. In der Praxis bedeutet dies, dass der Code-Block mit der Funktionsdefinition innerhalb eines If-Statements steht. Die Funktion wird also nur dann definiert, wenn bestimmte (in der If-Anweisung formulierten) Rahmenbedingungen gegeben sind. Ebenso, wie bei verschachtelten Funktionen gilt für Conditional Functions: Kein Aufruf, bevor der Code mit der Funktionsdefinition ausgeführt wurde. Da man sich nicht darauf verlassen kann, dass eine Conditional Function definiert wurde, sollte deren Aufruf nur mit vorangehender Existenzabfrage erfolgen. Conditional Functions werden oft verwendet, wenn ein Script Funktionen benötigt, die aus Bibliotheken stammen, bei denen man sich nicht darauf verlassen kann, ob sie auf dem Webserver installiert sind. Fehlt die Funktion, so wird eine eigene implementiert, die dann einspringt – hierdurch erspart man sich gerne mal die Installation einer Bibliothek und die damit verbundene Anpassung einer PHP-Standardkonfiguration. Ist die Funktion bereits definiert – die nötige Bibliothek also installiert –, so greift das Script auf diese zurück. Nachfolgend der Code einer je nach Konfigurationseinstellung eingebundenen oder nicht eingebundenen Bibliotheksdatei, worauf ein Script folgt, welches ggf. die fehlende Funktionen implementiert. Die Ausgabe des Scripts gibt dann Aufschluss darüber, welche Version der Funktion tatsächlich verwendet wird.

<?php
    // Auszug aus einer genutzten Bibliothek, die Standardmäßig eingebunden
    // wird - oder eben nicht...
    // Je nach Konfiguration des Webservers (bzw. von PHP) wird der Code
    // aus dieser Datei eingebunden.
    :
    :
    function f_aus_bibliothek () {
        return 'Ich stamme aus der Bibliothek!';
    }
    :
    :
?>
<?php
    // Inhalt des Scripts, welches die von f_aus_bibliothek zur Verfügung
    // gestellte Funktionalität nutzen möchte

    // Wurde die Funktion bislang noch nicht definiert?
    if (!function_exists ('f_aus_bibliothek')) {
        // Dann sollte das jetzt geschehen
        function f_aus_bibliothek () {
            return 'Ich stamme nicht aus der Bibliothek, erfülle aber den selben Zweck!';
        }
        // Erst ab diesem Punkt kann die Funktion aufgerufen werde
        // (welche Implementation dabei auch immer ausgeführt wird)
    }

    // Immer vorher nachschauen, ob die Funktion bereits definiert wurde
    if (function_exists ('f_aus_bibliothek'))
        // Aufruf der Funktion
        $werwars = f_aus_bibliothek ();
    // Und das Ergebnis ausgeben
    echo $werwars . '<br>';
?>
Letzte Posts aus unserem Forum

Webentwickler Konferenz in Hamburg

Hallo Zusammen, Am 20./21. Mai findet in Hamburg die erste Developer Conference 2011 statt. Wie der Name bereits verrät, handelt die Konferenz rund ... » mehr

von devcon-hamburg am Dienstag, 12. April 2011 16:50 in PHP - noch nicht beantwortet

bedingte Weiterleitung in Kontaktformularen

Hallo zusammen, ich habe ein kleines Problem: Ich brauche bei der Entwicklung eines Kontaktformulares für eine Website eine bedingte Weiterleitung ... » mehr

von scatha am Donnerstag, 10. März 2011 01:12 in PHP - noch nicht beantwortet

Gesucht: Auslesen einer externen Website

Mein vorhaben ist recht simpel aber ich bin php noob (hoffe das entschuldigt es nen bissl xD) und hab kp wie ichs anfangen soll. Und zwar möchte ich ... » mehr

von HeathenMan am Dienstag, 1. Februar 2011 22:57 in PHP - bisher 1 Antwort
Letzter Beitrag: Donnerstag, 3. Februar 2011 14:43 von alm

Hallo, am einfachsten und kompaktesten kann man das mit einem regulären Ausdruck machen. Einfach mal nach der Funktion preg_match_all suchen und den ... » mehr

Zeilenumbruch in der Bildergalerie-Beschriftung

Hallo, die Bildergalerie mit php und js ist super, jedoch möchte ich gern zu meinen Bildern verschiedene Bemerkungen machen und zwar untereinander, ... » mehr

von Sylma am Mittwoch, 26. Januar 2011 01:13 in PHP - bisher 1 Antwort
Letzter Beitrag: Freitag, 28. Januar 2011 10:16 von alm

Hallo, ich nehme an, dass \n im Beschreibungstext nicht funktioniert aber versuchen kann man es. Ansonsten: Schon mal mit einer UTF-Sequenz ... » mehr

Bildergalerie mehrfach einbinden

Hallo alle miteinander, ich hoffe, dass mit hier jemand helfen kann. Ich habe mir hier von der Seite die Bildergalerie mit JS und PHP ... » mehr

von Saga am Dienstag, 28. Dezember 2010 09:57 in PHP - bisher 6 Antworten
Letzter Beitrag: Mittwoch, 29. Dezember 2010 20:50 von Saga

Hallo Alex, die Warnung ist zwar jetzt durch das isset weg, aber die Daten werden immer noch nicht übergeben. (Nachdem ich durch das isset die ... » mehr

¬ Tutorials



¬ Insolvenzrecht