mekl: bei Funktionsaufruf eine Parameter "überspringen"

Hallo,

ich frage mich gerade, wie und ob es möglich ist, bei einem Funktionsaufruf in PHP einen Parameter zu "überspringen". Ich meine damit, dass man z. B. den ersten notwendigen Parameter setzt, einen optionalen zweiten Parameter nicht setzen möchte (also auf dem Standardwert belassen möchte) und einen dritten wiederum setzen möchte.

Beispiel wäre zum Beispiel ein Aufruf folgender Funktion:

string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )

Möchte man nur einen String und einen Zeichensatz übergeben, wie geht man dann vor?

Ok, in dem Fall könnte man den Standardwert des zweiten Parameters in der PHP-Referenz ermitteln und diesen einfach noch einmal beim Funktionsaufruf mit angeben, aber nehmen wir einmal an ich möchte diese Funktion einfach aufrufen, ohne an dem zweiten Parameter etwas zu rütteln (evtl. hängt der Standardwert des zweiten Parameters ja auch von anderen Dingen zur Laufzeit ab).

dasIstDieFrage = funktionsaufruf('erster Parameter' , DEFAULT , 'dritter Parameter');

Grüße

mekl

  1. Tach!

    ich frage mich gerade, wie und ob es möglich ist, bei einem Funktionsaufruf in PHP einen Parameter zu "überspringen". Ich meine damit, dass man z. B. den ersten notwendigen Parameter setzt, einen optionalen zweiten Parameter nicht setzen möchte (also auf dem Standardwert belassen möchte) und einen dritten wiederum setzen möchte.

    Nein, das geht nur bei Python und seiner Möglichkeit, positionsorientierte und Keyword-Parameter zu verwenden. PHP kennt nur einen festen Bestandteil und danach optionale Parameter, die man jedoch nur von hinten her weglassen kann.

    Beispiel wäre zum Beispiel ein Aufruf folgender Funktion:
    string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )
    Möchte man nur einen String und einen Zeichensatz übergeben, wie geht man dann vor?

    Einen Zeichensatz nimmt diese Funktion gar nicht an, aber eine Kodierung (ja, da gibt es Unterschiede). Außerdem benötigt man sie üblicherweise zugunsten von htmlspecialchars() nicht. Die hat aber die gleiche Signatur. Um deine Frage zu beantworten, es geht nicht mit Weglassen und es gibt auch keinen allgemeingültigen Weg. Manchmal kann man einfach null übergeben, aber das kommt dann auch so in der Funktion an und nicht der im Funktionskopf definierte Default-Wert. Ein null ist also nur dann sinnvoll, wenn der Code in der Funktion es entsprechend auswertet.

    dedlfix.

    1. Hallo,

      ich frage mich gerade, wie und ob es möglich ist, bei einem Funktionsaufruf in PHP einen Parameter zu "überspringen". Ich meine damit, dass man z. B. den ersten notwendigen Parameter setzt, einen optionalen zweiten Parameter nicht setzen möchte (also auf dem Standardwert belassen möchte) und einen dritten wiederum setzen möchte.
      Nein, das geht nur bei Python ...

      das "nur" stört mich in diesem Satz. Denn ich kenne diese Möglichkeit von früher auch von verschiedenen BASIC-Dialekten, AFAIR sogar in VBA.
      Wo ich das bisher erlebt habe, setzte man im Funktionsaufruf einfach nichts (außer eventuell Whitespace) zwischen die Kommas, ungefähr so:

      CALL ProcName(par1,,,par4)

      Ciao,
       Martin

      --
      Zwei Kumpels sitzen vor dem Computer. "Welche Suchmaschine benutzt du eigentlich meistens?" - "Prima Vera." - "Hmm, kenn' ich gar nicht." Dann geht die Tür auf: "Schatz ich habe deine Sonnenbrille wiedergefunden!" - "Prima, Vera!"
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Lieber Der Martin,

        bastelt man sich in PHP deswegen nicht lieber assoziative Arrays als Funktionsparameter? Also in diesem Fall bietet sich das an. In meinem Array gibt es dann eben nur die Indices, zu deren Parameter ich einen Wert übergeben möchte. Die restlichen Parameter werden dann eben von der Funktion "vervollständigt".

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
      2. Tach!

        Nein, das geht nur bei Python ...
        das "nur" stört mich in diesem Satz.

        Ok, das war leichtfertig formuliert, C# kann das mittlerweile auch.

        dedlfix.