Sponsor-Board.de

Normale Version: PHP nested functions
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo alle zusammen,


ich spiel mich grad bei PHP mit verschachtelten Funktionen herum, und bin auf eine, meines Erachtens nach, unlogische Eigenschaft gestoßen, und wollte fragen ob jemand von euch weiß wieso das so ist.

Und zwar habe ich folgenden Code

PHP-Code:
function baum($test){
    function 
f1(){
        return 
"f1 wurde aufgerufen";
    }
    
    function 
f2(){
        return 
"testausgabe " f1();
    }
    
    echo 
f2();

    include 
"test.php";
}
baum("testtext"); 


Die Datei test.php sieht so aus:

PHP-Code:
<h1>Überschrift</h1>
<?
php echo f1(); ?>


Die Ausgabe im Browser sieht folgendermaßen aus:

testausgabe f1 wurde aufgerufen
Überschrift
Fatal error: Call to undefined function f1 in ....

Und genau das verstehe ich nicht, wieso die Funktionen f1 und f2 von der inkludierten Datei nicht aufrufbar sind, Variablen jedoch schon. Also wenn ich die Funktionen f1 und f2 auf die Art

PHP-Code:
$f1 = function(){...} 

deklariere, und ich dann $f1() schreibe, funktioniert es so wie gewünscht.

Kann mir jemand erklären wieso es so funktioniert?


LG, David S.

Ich arbeite nicht so oft(eher nicht) mit verschachtelte Funktionen. Aber so weit ich weiß sind die Funktionen nicht von aussen aufrufbar es sei denn es wurde vorher die Hauptfunktion ausgeführt. Das heißt würdest du das include unter die Funktion

Code:
baum("testtext");

setzen sollte es gehen. Ich weiß jetzt nur nicht genau wie das include in einer Funktion gehandelt wird.


Eventuell kann dir jemand eine bessere Antwort geben als ich, ich arbeite lieber mit Klassen Biggrin

Eine Funktion in einer Funktion? Biggrin

Ich denke du versuchst eine Klasse zu erstellen, aber das müsste so aussehen:

Zitat:
class baum {
public $name;
.
.
.
public function f1() {
.
.
.
}
}



test.php:

Zitat:
include baum.class.php;
$baum = new baum();
echo $baum->f1();

als kleinen denkanstoß noch das [Link: Registrierung erforderlich]
Hallo,


danke für eure Antworten. Bin von einer Logik ausgegangen wie sie in Javascript vorhanden ist, jedoch scheint dies bei php nicht der Fall zu sein -> geschachtelte Funktionen werden nach dem Funktionsaufruf wie public functions behandelt.

@rapton, eine Klasse könnte das Problem in der Praxis evt. umgehen, jedoch war das nur eine Spielerei
Referenz-URLs