Mike: Variablen an Funktion übergeben scheitert

Hi Leute,

ich habe mir jetzt schon mehrere Beiträge angesehen was das Thema Variablen & Funktionen angeht durchgelesen.

Leider funktioniert es bei mir nicht, egal was ich mache.

Folgendes Problem:

Code:

function test($a_tel) //$a_tel wird von einem Formular Übergeben
{
return $a_tel;
echo $a_tel;
}
test();

Fehler bei Aufruf der Function:

Warning: Missing argument 1 ......

Ich habe es auch schon mit Globalen Variablen versucht und "return $a_tel" auskommentiert aber auch kein Erfolg...

Hat jemand eine Idee?

  1. Hallo Mike.

    function test($a_tel) //$a_tel wird von einem Formular Übergeben
    {
    return $a_tel;
    echo $a_tel;

    Anmerkung am Rande: $a_tel wird hier niemals ausgegeben, da das return-Kommando die Abarbeitung der aktuellen Funktion beendet.

    }
    test();

    Fehler bei Aufruf der Function:

    Warning: Missing argument 1 ......

    Und diese Fehlermeldung weist dich überdeutlich auf deinen Fehler hin: du rufst die Funktion "test" ohne das erforderliche Argument auf. Ändere dies.

    Einen schönen Donnerstag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Hallo Mike.

      function test($a_tel) //$a_tel wird von einem Formular Übergeben
      {
      return $a_tel;
      echo $a_tel;

      Anmerkung am Rande: $a_tel wird hier niemals ausgegeben, da das return-Kommando die Abarbeitung der aktuellen Funktion beendet.

      }
      test();

      Fehler bei Aufruf der Function:

      Warning: Missing argument 1 ......

      Und diese Fehlermeldung weist dich überdeutlich auf deinen Fehler hin: du rufst die Funktion "test" ohne das erforderliche Argument auf. Ändere dies.

      Einen schönen Donnerstag noch.

      Gruß, Mathias

      ok kapier ich nicht, geb ich offen zu.
      also ich habe auch ohne return ...; versucht, ging auch nicht.

      Das fehlenden Argument irritiert mich jetzt. Dachte mit "function test($a_tel)" wird die Variable "$a_tel" an die Funktion übergeben?!

      Wenn nicht, wie bekomme ich die denn jetzt in die Funktion?

      1. Hallo Mike,

        Hallo Mike.
        [...]
        Gruß, Mathias

        bitte zitiere sinnvoll, nicht wahllos das gesamte Vorgängerposting.

        Das fehlenden Argument irritiert mich jetzt. Dachte mit "function test($a_tel)" wird die Variable "$a_tel" an die Funktion übergeben?!

        Nein. Offensichtlich ist dir das Konzept von Funktionen noch nicht klar. Eine Funktion ist ein Stück Programmcode, der in der Regel ein oder mehrere Argumente (Parameter) bekommt, mit diesen Werten irgendwas macht und ein Ergebnis zurückgibt. Ein ganz einfaches Beispiel:

        function min($a, $b)
         { var $res;

        if ($a<b)
              $res = $a;
           else
              $res = $b;
           return ($res);
         }

        Das ist eine Funktion, die zwei Parameter erwartet. Innerhalb der Funktion heißen diese beiden Parameter $a und $b, außerhalb der Funktion existieren sie gar nicht. Die Funktion ermittelt nun den kleineren der beiden Werte und gibt den als Ergebnis an das aufrufende Programm zurück.
        Das ist jetzt bewusst sehr ausführlich formuliert - normalerweise würde ich meinen Programmcode nicht so umständlich schreiben. Aber es dient ja nur zur Darstellung des Prinzips.

        Will ich die Funktion nun verwenden, dann schreibe ich die Werte, die ich übergeben will, in die Funktionsklammer. Das Ergebnis kann ich einer weiteren Variablen zuweisen oder auch in einem Ausdruck direkt verarbeiten:

        $kleinsterwert = min($eingabe1, $eingabe2);
        echo min(17,19);
        if (min($x,$y)>10)
         { ... }

        Hilft das nun deinem Verständnis auf die Sprünge?

        Und bevor nun das große "Ja, aber" losgeht: Was ich eben geschildert habe, ist nur der Regelfall. Es ist je nach Zweck und Verwendung auch möglich, dass eine Funktion kein Ergebnis zurückliefert; es ist ebenso möglich, dass eine Funktion keine Parameter bekommt.

        So long,
         Martin

        --
        Wichtig ist, was hinten rauskommt.
          (Helmut Kohl, 16 Jahre deutsche Bundesbirne)
      2. Hallo,

        Du mußt der Funktion einen Parameter geben, wenn sie einen erwartet, das sagt missing Argument ja aus.

        also nicht test();

        sondern test(parameter). Dieser Parameter kann ein string oder ein numerischer Wert oder eine boolsche Konstante sein. Mit der kannst Du dann in der Funktion arbeiten und den durch die Funktion verarbeitetn Daten in einer Variablen gespeichert zurückgeben. Dabei kann man mit return($foo) nur eine Variable zurückgeben. return($foo, $bar) geht _nicht_. In dem Fall müßte ein Array zurüchgegeben werden, z. B.
        $a['foo'] statt $foo
        $a['bar'] statt $bar.
        Dagegen kann man Funktionen coden, die mehrere Parameter erwarten:

        function addiere($a, $b) {
          $z = $a+$b;
        }

        echo addiere("2", "4");

        müsste 6 ergeben.

        Wenn Du mit der Rückgabe der Funktion noch arbeiten willst, muß die natürlich auch gespeichert werden.
        Möglich wäre z.B.
        $a_nach_test = test($a);

          
        <?PHP  
        function test($parameter) {  
          $parameter .= "mit Anhang";  
          return($parameter);  
        }  
          
        $a = "Herr Meyer kommt ";  
        echo test($a);  
        ?>  
        
        

        sollte wenn ich keinen Fehler gemacht habe

        "Herr Meyer kommt mit Anhang"

        ausgeben. Dagegen würde echo test("Frau Schroder ");

        "Frau Schroder kommt mit Anhang"

        ausgeben.

        Oder Du mußt die Variable innerhalb der Funktion als global definieren, dann brauchtst Du sie nicht als Parameter übergeben. Die Übergabe des Parameters muss aber erfolgen, wenn die Funktion so angelegt ist.

        Ich hoffe das kam halbwegs verständlich 'rüber.

        Wenn nicht, wie bekomme ich die denn jetzt in die Funktion?

        Als Parameter, das ist aber auch bei gleichem Namen nicht die Variable!

        netten Tag
        ^da Powl

        --
        ===============================
        powl.hat-gar-keine-homepage.de/
        1. Hallo Ilse,

          echo addiere("2", "4");

          müsste 6 ergeben.

          Das ist falsch, numerische Werte, daher keine "" also

          echo addiere(2, 4);

          machet jut Ilse
          ^da Powl

          --
          ===============================
          powl.hat-gar-keine-homepage.de/
        2. Hi,

          function addiere($a, $b) {
            $z = $a+$b;
          }

          echo addiere("2", "4");
          müsste 6 ergeben.

          pass auf, dass du nicht auf die Nase fällst, wenn du Strings und numerische Werte verwechselst! In PHP hast du zufällig Glück, weil das '+' hier nicht der Stringverkettungs-Operator ist. In Javascript würde dein Beispiel addiere("2","4") aber nicht 6 ergeben, sondern "24".
          Warum schreibst du überhaupt Strings, wenn du eigentlich Zahlenwerte meinst?

          Oder Du mußt die Variable innerhalb der Funktion als global definieren, dann brauchtst Du sie nicht als Parameter übergeben.

          Davon würde ich aber abraten. Eine Funktion schreibe ich doch auch, um den Code modular zu kapseln. Die Verwendung globaler Variablen innerhalb der Funktion widerspricht diesem Prinzip.

          Ciao,
           Martin

          --
          Wer morgens zerknittert aufsteht, hat den ganzen Tag Gelegenheit, sich zu entfalten.
          1. Hallo,

            Warum schreibst du überhaupt Strings, wenn du eigentlich Zahlenwerte meinst?

            Das war mir auch aufgefallen, das hatte ich schon verbessert. An Ilse, weil die Ingrid grad im Urlaub ist. ^^

            Oder Du mußt die Variable innerhalb der Funktion als global definieren, dann brauchtst Du sie nicht als Parameter übergeben.

            Davon würde ich aber abraten. Eine Funktion schreibe ich doch auch, um den Code modular zu kapseln. Die Verwendung globaler Variablen innerhalb der Funktion widerspricht diesem Prinzip.

            Da gebe ich Dir Recht. Nur wollte ich die Möglichkeit nicht verschwiegen haben.
            Zudem mag es auch Anwendungen geben, wo das einfacher ist, als konstante Parameter immer wieder neu zu übergeben. Sollte es komplett OOP sein, wären doch Klassen noch besser, oder?

            gute Nacht
            ^da Powl

            --
            ===============================
            powl.hat-gar-keine-homepage.de/
            1. Hallo,

              Warum schreibst du überhaupt Strings, wenn du eigentlich Zahlenwerte meinst?

              Das war mir auch aufgefallen, das hatte ich schon verbessert. An Ilse, weil die Ingrid grad im Urlaub ist. ^^

              Oder Du mußt die Variable innerhalb der Funktion als global definieren, dann brauchtst Du sie nicht als Parameter übergeben.

              Davon würde ich aber abraten. Eine Funktion schreibe ich doch auch, um den Code modular zu kapseln. Die Verwendung globaler Variablen innerhalb der Funktion widerspricht diesem Prinzip.
              Da gebe ich Dir Recht. Nur wollte ich die Möglichkeit nicht verschwiegen haben.
              Zudem mag es auch Anwendungen geben, wo das einfacher ist, als konstante Parameter immer wieder neu zu übergeben. Sollte es komplett OOP sein, wären doch Klassen noch besser, oder?

              gute Nacht
              ^da Powl

              Supi hab geschafft Variablen an eine Funktion zu übergeben -Dank an Euch beide-

              ABER die Funktion wo ich die Variablem benötige wird durch ein fertiges Script(fpdf) aufgerufen (wiederum durch eine Funktion).
              Hier kann ich leider die Variablen nicht so übergeben wie in Euren Beispielen. Zudem sitzt die benötigte Funktion innerhalb einer Klasse.

              Wie kann ich denn die Variablen Global für die Klasse+Funktion definieren?

              Vielleicht hilft mir das ja weiter

            2. Hallo Powl,

              Warum schreibst du überhaupt Strings, wenn du eigentlich Zahlenwerte meinst?
              Das war mir auch aufgefallen, das hatte ich schon verbessert. An Ilse, weil die Ingrid grad im Urlaub ist. ^^

              ach so, ist sie das? Naja, ich hab normalerweise nichts mit der Ingrid, deswegen bin ich da nicht so auf dem Laufenden. ;-)

              [...] Die Verwendung globaler Variablen innerhalb der Funktion widerspricht diesem Prinzip.
              Da gebe ich Dir Recht. Nur wollte ich die Möglichkeit nicht verschwiegen haben.

              Okay. Fürs Protok^WArchiv, sozusagen.

              Sollte es komplett OOP sein, wären doch Klassen noch besser, oder?

              Das ist Geschmackssache. Was zählt, ist IMHO die Denkweise der OOP. Ob man dazu die vorgefertigten Mittel nutzt, die einem die Programmiersprache bietet, ist dabei nebensächlich. Natürlich bietet es sich an, Klassen zu verwenden, wenn die Sprache so etwas kennt.
              Aber die Grundzüge (Kapselung, Vererbung, ggf. Polymorphie) sind auch ohne explizite Unterstützung durch die Programmiersprache möglich. Ich programmiere auch in C (ungern C++) oder sogar Assembler bis zu einem gewissen Grad objektorientiert. Ohne Klassen - bzw. ich bilde dann ein ähnliches Konzept nach.
              Das GUI von Windows ist beispielsweise so programmiert[*]: Ein kleiner Teil in Assembler, das Gros in C. Trotzdem ist das ganze System objektorientiert aufgebaut. Die Idee der Objektorientierung zieht sich wie ein roter Faden durch.

              So long,
               Martin

              [*] Zumindest die Basis. Erst spätere Erweiterungen wie OLE/COM sind dann in C++ implementiert - deswegen ist es auch so umständlich, ein COM-Objekt in Plain C zu schreiben, während es in C++ "fast von allein" passt.

              --
              Paradox ist, wenn jemand eingefleischter Vegetarier ist.
  2. Hallo,

    function test($a_tel) //$a_tel wird von einem Formular Übergeben
    {
    return $a_tel;
    echo $a_tel;
    }

    also definierst du eine Funktion, die *ein* Argument erwartet und auch benutzt.

    test();

    Und dann rufst du sie auf, und übergibst *kein* Argument.

    Warning: Missing argument 1 ......

    Ja logisch, oder nicht? Wenn du einen Parameter vorsiehst, musst du ihn der Funktion auch geben - womit soll sie sonst arbeiten?

    So long,
     Martin

    --
    Success should be measured not so much by the position that one has reached in life,
    but by the obstacles one has overcome while trying to succeed.