PHP optionale Parameter bei eigenen Funktionen

  • Wenn man mittels function eine eigene PHP-Funktion erstellt kann man ja Parameter übergeben. Beispiel:

    PHP
    function addieren($a,$b) {
    $ergebnis = $a + $b;
    return $ergebnis;
    }


    Wie ist das jetzt mit optionalen Parametern? Ich hab zur Zeit nämlich eine Funktion wo ich nur manchmal einen Parameter mehr übergeben muss.
    Wenn ich die Funktion aufrufe, dann sieht das bei mir zur Zeit so aus (wenn der optionale [zweite] Parameter nicht gesetzt ist):

    PHP
    echo anzahl_kommentare($a,'',$b);

    Wenn ich ,'', nicht mache, dann bekomme ich eine Meldung, dass die Funktion noch einen weiteren Parameter erwartet. Kann man es so machen, dass man PHP klar macht "Dieser Parameter ist optional"?
    Ist zwar jetzt nicht schlimm wnen man immer leere Anführungszeichen setzen muss aber mich interessiert es trotzdem, ob es geht oder nicht.

    Danke im voraus :)

    Don't follow me, I run into walls.

  • "echte" optionale Parameter gibt es bei php nicht.
    es gibt aber einige Workarounds. Der einfachste sieht so aus, dass du Parametern default-werte zuweist:

    PHP
    function my_function($a, $b, $c=null) { //$c hat, wenn nicht übergeben, null
    //mach was tolles
    }
    
    
    $d = my_function("bla", "blub"); //$c wird nicht angegeben

    Wichtig: Parameter mit default-werten immer hinten im Funktionskopf deklarieren

    Edit 1: zu langsam^^
    Edit 2: Also ich persönlich finds ja ok, let-me-google-this-for-you links zu antworten, aber bitte nicht hinter tinyurls.
    Ich denk mir halt, da is evtl. was interessantes hinter, wo ich noch was dazulernen kann und dann kommt der Blödsinn. Das nervt!


    Einmal editiert, zuletzt von jojo87 (15. Juni 2010 um 20:02)

  • Dann musst Du b optional machen.

    PHP
    function my_function($a, $b = null, $c = null) { //$b hat, wenn nicht übergeben, null
    //mach was tolles
    }
    
    
    $d = my_function("bla","","blubb"); //$b wird nicht angegeben

    Statt "null" gebe ich auch gerne einfach "" als Standardwert für die Variable an. Innerhalb der Funktion muss man dann eben nur prüfen, ob und wenn ja was in der Variable drinne steht.

  • tja, dann kommt man nicht drumrum den auch "optional" zu machen ;)
    es gibt halt keine möglichkeit, echte Optoinalität in php zu realisieren.
    Wenn mans ganz generisch machen will, muss man call_user_func_array bemühen, was auch letztendlich nicht schön ist.


  • Okay ich sehe es geht eigentlich NICHT ohne größere Mühen. Dann macht man doch lieber ...,"",...

    Don't follow me, I run into walls.

  • Wie gesagt man kann auch Werte in eine Funktion holen, kommt halt drauf an was sie machen soll , oft ist das aber sinnvoller

    mfg

  • Okay ich sehe es geht eigentlich NICHT ohne größere Mühen. Dann macht man doch lieber ...,"",...

    für viele Scripte reicht meine zuerst beschriebene Methode vollkommen.
    Solange man sich im klaren ist, welche Parameter optional sein sollen/müssen und welche nicht.
    Keine Angst ;)


  • http://php.net/manual/de/function.func-get-args.php

    Schau dir die Funktion mal an, könnte dir helfen.

    Ein ganz simples Beispiel damit:

    PHP
    <?php
    function test() {
        $hallo = func_get_args();
        return $hallo[0];
    }
    echo test("hallo");   // Ausgabe: hallo
    ?>

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • func_get_args hat doch nichts mit optionalen Parametern zu tun und ist in den meisten Fällen SinnlosS :D Wenn man nicht wissen kann, wieviele Parameter an die Funktion übergeben werden, dann ok, aber ansonsten s.o.

  • func_get_args hat doch nichts mit optionalen Parametern zu tun und ist in den meisten Fällen SinnlosS :D Wenn man nicht wissen kann, wieviele Parameter an die Funktion übergeben werden, dann ok, aber ansonsten s.o.



    Naja, ich finde schon, dass func_get_args mit optionalen Parametern zu tun hat. ^^
    Anwendungsgebiete gibt es durchaus, allerdings nicht gerade häufig, das stimmt schon. ;)

    Das finde ich beispielsweise ein sehr anschauliches Beispiel für den praktischen Nutzen dieser Funktion. Ist aus den Kommentaren auf http://php.net/manual/de/function.func-get-args.php kopiert.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

    Einmal editiert, zuletzt von Sweet_Angel (25. Juni 2010 um 23:04)