funktion in funktion?
Peter
- php
0 Lachgas0 David Tibbe0 Tom0 Alexander Brock0 Tom
0 Tom2 funktioniert
Peter0 Tom
Hallo!
Ich habe mal wieder ein Problem. Ist es möglich, eine (fremde) Funktion innerhalb einer Funktion aufzurufen?
z.b.
function tuwas() {
echo "tu was";
}
function machwas() {
tuwas();
}
machwas();
ist soetwas möglich? oder gibt es hier auch etwas ähnliches wie globale variablen? (global tuwas() ??)
wäre über hilfe dankbar
Gruss
Peter
吃了吗, Peter?
Ich habe mal wieder ein Problem. Ist es möglich, eine (fremde)
Funktion innerhalb einer Funktion aufzurufen?
Na klar. Ohne das wäre rekursive Programmierung nicht mal im Ansatz
möglich.
> function tuwas() {
> echo "tu was";
> }
> function machwas() {
> tuwas();
> }
Exakt so. (Obwohl dieses Beispiel keinen großen Nutzen hat ;-)
℆, ℒacℎgas
Peter
Na klar. Ohne das wäre rekursive Programmierung nicht mal im Ansatz möglich.
Bei mir funktioniert das nämlich nicht wirklich... ich habe eine ziemlich große funktion, in der ein paarmal andere funktionen in verschachtelten if-blöchen aufgerufen werden. die große funktion wird anschließend auch in einem if aufgerufen...
mlg
Peter
Hello,
Bei mir funktioniert das nämlich nicht wirklich... ich habe eine ziemlich große funktion, in der ein paarmal andere funktionen in verschachtelten if-blöchen aufgerufen werden. die große funktion wird anschließend auch in einem if aufgerufen...
Das könnte nun wierderum an den Skopes (Gültigkeitsbereichen) der benutzten Variablen liegen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Peter,
Ich habe mal wieder ein Problem. Ist es möglich, eine (fremde) Funktion innerhalb einer Funktion aufzurufen?
Probiere es mit einem ähnlich einfachen Beispiel doch einfach einmal aus.
Grüße
David
Hello David,
Probiere es mit einem ähnlich einfachen Beispiel doch einfach einmal aus.
Nur weil es (zufällig) funktioniert, muss es doch aber noch nicht erlaubt sein, doer?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
Nur weil es (zufällig) funktioniert, muss es doch aber noch nicht erlaubt sein, doer?
Das gilt AFAIK bei HTML und Browsern, aber nicht bei Programmier-Sprachen,
die sollten da strenger sein.
Bei PHP sollte man natürlich error_reporting(E_ALL); and den Anfang
des Scriptes schreiben.
Gruß
Alexander Brock
Hello,
Nur weil es (zufällig) funktioniert, muss es doch aber noch nicht erlaubt sein, oder?
Das gilt AFAIK bei HTML und Browsern, aber nicht bei Programmier-Sprachen,
die sollten da strenger sein.
In Programmiersprachen gilt das genauso.
Unsaubere Bereichsgrenzenbehandlung ist die häufigste Fehlerquelle. Solange die Werte im erlaubten vorgesehenen[1] Bereich bleiben, funktioniert alles bestens, aber sowie ein Wert an die Grenze kommt oder sie überschreitet, macht das Programm ungewöhnliche Dinge.
Und in PHP ist es sehr wohl möglich, innerhalb einer Funktion eine andere zu deklarieren. Beim ersten Aufruf funktioniert alles bestens. Wenn man aber nun die Hüllfunktion innerhalb des Scriptes das zweite Mal aufruft, gibt es einen Redefine-Error.
Der Parser kann soclche Fehler im Design nicht finden, denn unter bestimmten Umständen sins sie ja auch wirklich gewollt. Mit einem Überschlag bei Variablen hat man immer gerne gearbeitet und eine bedingte Deklaration ist auch oft praktisch.
[1] vorgesehen aus Sicht des Programmieres ist leider oft nur der IHM im Moment der Codierung sinnvoll erscheinende Bereich, aber nicht der über die Benutzerschnittstelle möglicherweise eingebbare. Das wäre aber richtig! Darüberhinaus laufen aber auch Schleifen oft an ihre Grenzen. Wenn die Lauf-/Abbruchbedingung dann z.B. heißt "until i > MaxInt" (symbolisch) dann wird die Schleife vermutlich niemals enden, auch wenn sauber hochgezählt wurde. i hat eben leider den Typ Int gehabt - Pech eben!
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
Ich habe mal wieder ein Problem. Ist es möglich, eine (fremde) Funktion innerhalb einer Funktion aufzurufen?
z.b.
function tuwas()
{
echo "tu was";
}
function machwas()
{
tuwas();
}
machwas();
Der Aufruf ist möglich. Es gibt aber keine private functions. D.h., dass Du innerhalb einer Funktion keine Funktion deklarieren kannst, die dann ausschließlich nur dieser Funktion zur Verfügung steht. Wenn Du eine Funktion innerhalb einer andern deklarierst, daf die neue innerhalb des gesamten Scriptes noch nicht existiereren und steh anschließend auch dem gesamten Script zur Verfügung. Es wäre quasi Aufgabenstellung für PHP 6, dies zu ermöglichen. PHP 5 kann es bereits für die OOP, also private Functions für Objekte.
Außerdem hast Du in Deinem Beispiel keine Funktionen, sondern Prozedurten deklariert, denn eine "echte" Funktion hat einen Rückgabewert und spricht keinesfalls selber externe Kanäle (Standardausgabe) an.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hallo!
funktioniert doch. hatte eine variable nicht als global definiert
mlg
Peter
Hello,
funktioniert doch. hatte eine variable nicht als global definiert
Igitt, globale Variablen sind hässlich. Spätestens damit werden universelle Funktionen zu einmalig nutzbaren Prozeduren degradiert. Willst Du jedes Mal alles neu erfinden müssen?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom