optionale Parameter beim Funktionsaufruf "überspringen"?
Matthias Jütte
- php
0 XaraX0 fk0 Matthias Jütte0 fk0 Matthias Jütte0 fk
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
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';
$a['z']='parameter';
function beispiel($a,$b,$x='')
{
if($x['x']!='')
}
beispiel('Hallo','Forum',$a);
Gruß aus Berlin!
eddi
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.
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
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 ?
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
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.