Matthias Jütte: optionale Parameter beim Funktionsaufruf "überspringen"?

Hallo!

Wenn ich in PHP eine Funktion mit optionalen Parametern definiere

***
function beispiel ($a, $b, $x="", $y="", $z="") {
}
***

ist es dann möglich, beim Funktionsaufruf einen Paramter an $z zu übergeben ohne dabei die Angaben für $x und $y machen zu müssen?

Gruß

Matthias

--
ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
http://www.makaio.de/quotations
  1. Hi Matthias,

    ist es dann möglich, beim Funktionsaufruf einen Paramter an $z zu übergeben ohne dabei die Angaben für $x und $y machen zu müssen?
    nein, denn woher soll die Funktion jetzt wissen, dass Du z und nicht x meinst?

    Ein answeg aus diesem Dilemma ist ein Datenfeld:

    $a['x']='';
    $a['y']='';
    $a['z']='parameter';

    oder auch ganz schlicht:

    $a['z']='parameter';

    function beispiel($a,$b,$x='')
       {
       if($x['x']!='')

    usw.

    }

    beispiel('Hallo','Forum',$a);

    Gruß aus Berlin!
    eddi

    --
    at, wie er leibt und lebt auf ein Posting
    > > Nein, ich denke nicht.
    gepromptet
    > Das empfiehlt sich aber.
    :))))
  2. Wenn ich in PHP eine Funktion mit optionalen Parametern definiere

    ***
    function beispiel ($a, $b, $x="", $y="", $z="") {
    }
    ***

    ist es dann möglich, beim Funktionsaufruf einen Paramter an $z zu übergeben ohne dabei die Angaben für $x und $y machen zu müssen?

    keine angaben machen oder weglassen ?

    dies sind sogenannte 'positionsparameter', welche an der position erkannt werden, wie der name schon sagt. daher müssen fehlende positionsparameter durch trennzeichen(komma) angezeigt werden.

    die angaben zu x und y hast du ja als default definiert.

    zur behandlung der parameter gibts ja in php ein paar funktionen.

    1. Hallo!

      Ich denke die von XaraX vorgeschlagene Lösung ist schon recht praktikabel, warum ich da nicht selbst drauf gekommen bin weiß ich nicht.

      Ich dachte an Funktionen, die theoretisch mit einer ganzen Menge von Parametern arbeiten könenn, dies aber nicht immer tun. Da wäre es natürlich blöd

      a) bei der Definition bereits überlegen zu müssen, in welcher Reihenfolge die Parameter aufgeführt werden sollten oder
      b) den Aufruf so zu gestalten: beispiel($a, $b, , , , , $x, , , $y);

      Oder ist ein Fall, wo es eine solche Menge von Paramtern gibt, ohnehin durch eine Funktion falsch gelöst?

      Gruß

      Matthias

      --
      ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
      http://www.makaio.de/quotations
      1. Ich denke die von XaraX vorgeschlagene Lösung ist schon recht praktikabel, warum ich da nicht selbst drauf gekommen bin weiß ich nicht.

        die lösung ersetzt positionsparameter durch schlüsselwortparameter, welche je nach bedarf übergeben werden.
        (assoziatives array, index=schlüssel, inhalt=wert)

        Ich dachte an Funktionen, die theoretisch mit einer ganzen Menge von Parametern arbeiten könenn, dies aber nicht immer tun. Da wäre es natürlich blöd

        stimmt. das wird unübersichtlich.

        Oder ist ein Fall, wo es eine solche Menge von Paramtern gibt, ohnehin durch eine Funktion falsch gelöst?

        nein. daran ist nicht die funktion schuld.
        jede aufgabe läßt sich wieder in teilaufgaben zerlegen.

        ich arbeite z.b. so:

        ausgabe = aufgabe(eingabe)

        dies gilt grundsätzlich. egal wie komlex die aufgabe ist. (aufgabe kann sich ja den teilaufgaben bedienen)

        da jede aufgabe von einer klasse behandelt wird, ergibt sich hier eine 'baumstruktur'.

        praktisch sieht das bei mir so aus:

        $ausgabe = new aufgabe($eingabe) (gilt auch für teilaufgaben)

        da ich meine daten nur als objekte oder arrays halte, übergebe ich idr immer nur ein argument. gilt auch für methodenaufrufe.

        die eingabe kann eine baumstruktur aus objekten und arrays sein.
        in der methode wird dieser baum in einer schleife abgearbeitet, der type per case unterschieden, und das detail bearbeitet, wobei ggfls. eine teilaufgabe aufgerufen wird.

        ist eigentlich total simpel. habe ich allerdings selten woanders gesehen. warum eigentlich ?

        1. Hallo!

          Die Verwendung von Klassen wollte ich mit meiner Frage andeuten. Es funktioniert sicherlich toll, allerdings stellt sich die Frage, inweiweit du mit deien Klassen überhaupt _objektorientiert_ arbeitest.

          Was die Frage des sonst selten gesehen angeht: man muß sich halt erstmal reinarbeiten. Habe mir selber auch vorgenommen mal was mit Klassen zu machen (da, wo es sinnvoll erscheint). Aber mehr als ein paar Grundlagen kenne ich bisher auch nicht und schiebe es auch weiterhin vor mir her ;-)

          Gruß

          Matthias

          --
          ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
          http://www.makaio.de/quotations
          1. Die Verwendung von Klassen wollte ich mit meiner Frage andeuten. Es funktioniert sicherlich toll, allerdings stellt sich die Frage, inweiweit du mit deien Klassen überhaupt _objektorientiert_ arbeitest.

            objektorientiert bedeutet, daß aufgaben einer bestimmten art, welche oft mit verschiedenen ausprägungen anstehen, von einer klasse bearbeitet werden.

            die feinheiten dabei geben den ideologen ordentlich grund zum streiten.

            ein wesentlicher punkt ist die wiederverwendung, auch von existierenden klassen zur bildung von größeren klassen (vererbung).

            Was die Frage des sonst selten gesehen angeht: man muß sich halt erstmal reinarbeiten. Habe mir selber auch vorgenommen mal was mit Klassen zu machen (da, wo es sinnvoll erscheint). Aber mehr als ein paar Grundlagen kenne ich bisher auch nicht und schiebe es auch weiterhin vor mir her ;-)

            es ist noch kein meister vom himmel gefallen.
            mit z.b. ms visual studio läßt sich schön lernen, was objekte, objektstrukturen u.s. angeht.