Peter: funktion in funktion?

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

  1. 吃了吗, 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

    --
    Bei der intendierten Realisierung der linguistischen Simplifizierung
    des regionalen Idioms resultiert die Evidenz der Opportunität extrem
    apparent, den elaborierten und quantitativ opulenten Usus nicht assi-
    milierter Xenologien konsequent zu eliminieren!
    1. 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

      1. 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

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
  2. 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

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
    1. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. 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

        --
        SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
        http://againsttcpa.com
        1. 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

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
  3. 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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  4. hallo!

    funktioniert doch. hatte eine variable nicht als global definiert

    mlg
    Peter

    1. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau