Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktion mehrere optionale Parameter

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Funktion mehrere optionale Parameter

    Hallo,

    ich hab ein kleines Problemchen.

    Ich hab folgende Funktion:

    PHP-Code:

    function test($var1$var2$var3 "wert3"$var4 "wert4"$var5 "wert5") {

    [...]


    Ich möchte diese Funktion jetzt aber aufrufen und beispielsweise nur $var1, $var2 und $var5 angeben, der Rest soll auf der ursprünglichen Definition beleiben.

    Wenn ich die Funktion jetzt allerdings mit

    PHP-Code:

    test
    ("wert1""wert2", , , "wert5_neu"); 
    aufrufen will, gibt es einen Fehler. Wie kann ich das machen, dass ich die Funktion so aufrufen kann, ohne die anderen Felder mit z.B. '' überschreiben zu müssen?

    mfg
    Link

  • #2
    Kannst versuchen NULL zu übergeben, dann musst du innerhalb der Funktion aber auch auf !is_null() testen.

    Da ist aber letztlich Quark. Wenn du mal das mal das angeben willst als Parameter, bietet sich ein Array mit übergebenen Optionen wohl eher an.

    Kommentar


    • #3
      Stimmt, ein Array wäre in dem Fall wirklich die beste Lösung.

      Danke!

      mfg
      Link

      Kommentar


      • #4
        Ich finde die Lösung ohne Array nicht die schlechteste. Wenn's einen echten Mehrwert darstellt, ist
        PHP-Code:
        function test ($a$b NULL$c NULL)
          {
          
        // Variable Parameter
          
        if (NULL === $b$b 'Default2';
          if (
        NULL === $c$c 'Default3';

          
        // ...
          
        }

        test (
               
        'abcdefg' 
               
        NULL      ,
               
        'Teststring'
               
        ); 
        ein guter und übersichtlicher Workaround, statt alles in ein Array zu packen. Ist auch besser zu formatieren beim Funktionsaufruf. Schade, dass bei einer Angabe von NULL nicht automatisch der Vorgabewert verwendet wird. Das Problem läge dabei natürlich auf der Hand.

        Kommentar


        • #5
          Stimmt, ein Array wäre in dem Fall wirklich die beste Lösung.
          Es gibt auch die Funktion func_get_args(), mit der man die Argumente einer Funktion holen kann, ohne dediziert in der Funktions-Deklaration Argumente angeben zu müssen. Die Funktion func_get_args() liefert dir ein Array der Parameter zurück und du musst dann entsprechend prüfen, was du davon verarbeiten möchtest. Nachteil ist, dass jeder der Funktion irgendwelche Argumente in irgend einer Reihenfolge übergeben kann.

          Kommentar


          • #6
            Zitat von nikosch77
            Schade, dass bei einer Angabe von NULL nicht automatisch der Vorgabewert verwendet wird.
            Ja!

            Kommentar


            • #7
              Zitat von Zergling
              Zitat von nikosch77
              Schade, dass bei einer Angabe von NULL nicht automatisch der Vorgabewert verwendet wird.
              Ja!
              und was ist wenn du wirklich mal NULL willst?

              Code:
              Es gibt auch die Funktion func_get_args(), mit der man die Argumente einer Funktion holen kann, ohne dediziert in der Funktions-Deklaration Argumente angeben zu müssen. Die Funktion func_get_args() liefert dir ein Array der Parameter zurück und du musst dann entsprechend prüfen, was du davon verarbeiten möchtest. Nachteil ist, dass jeder der Funktion irgendwelche Argumente in irgend einer Reihenfolge übergeben kann.
              benutze ich gerne, wenn die übergebenen parameter verschiedene typen haben (müssen)....

              Kommentar


              • #8
                Das ist doch kein Widerspruch, NULL ist "undefiniert", also genau was verwendet werden soll, wenn ich den Parameter nicht verwende.

                Kommentar


                • #9
                  Zitat von Zergling
                  Das ist doch kein Widerspruch, NULL ist "undefiniert", also genau was verwendet werden soll, wenn ich den Parameter nicht verwende.
                  genau, NULL kann auch heißen, dass du die vorgebene möglichkeit nicht nutzen willst (im gegensatz zu dem beispiel hier, wo bei NULL ein standardwert benutzt wird). würde php nun hingehen und einen vorgabewert bei NULL annehmen, ginge das nicht.

                  Kommentar


                  • #10
                    Natürlich ist es schön, den Default unabhängig von NULL gleich in der Funktionsdeklaration setzen zu können.

                    In den meisten Fällen die bei mir so aufkreuzen, setze ich den Default aber eh oft durch Klassen-Konstanten, eben im Fall, dass der Parameter nicht gültig (oder, das wird dadurch ja aber schon abgedeckt, NULL) ist.

                    So und jetzt hab ich vergessen worums eigentlich ging

                    Kommentar


                    • #11
                      Zitat von Zergling
                      In den meisten Fällen die bei mir so aufkreuzen, setze ich den Default aber eh oft durch Klassen-Konstanten, eben im Fall, dass der Parameter nicht gültig (oder, das wird dadurch ja aber schon abgedeckt, NULL) ist.
                      Warum sagst du das nicht gleich? Die Lösung ist sogar noch besser

                      mfg
                      Link

                      Kommentar

                      Lädt...
                      X