=?ISO-8859-15?Q?Optionaler_Parameter_mit_Default-Wert_un?= =?ISO-8859-15?Q?d_null-=DCbergabe?=

This is a discussion on =?ISO-8859-15?Q?Optionaler_Parameter_mit_Default-Wert_un?= =?ISO-8859-15?Q?d_null-=DCbergabe?= within the Sonstige Fragen zu Anwendung und Programmierung (de.comp.lang.php.misc) forum.

=?ISO-8859-15?Q?Optionaler_Parameter_mit_Default-Wert_un?= =?ISO-8859-15?Q?d_null-=DCbergabe?=

Postby Jens Sieckmann on Wed Dec 03, 2008 6:25 am

Hallo,

ich möchte mal einen kleinen Diskussionsanstoß bieten, für eine Sache,
die mir eigentlich schon hätte früher auffallen müssen. Bei einer
Funktion/Methode, die optionale Parameter mit Wertzuweisungen in der
Signatur hat und mit null aufgerufen wird, findet keine Zuweisung des
Defaultwerts statt. Beispiel:

foo(null); // Ausgabe: <nix>
foo(); // Ausgabe: bar

function foo($param = 'bar')
{
echo $param;
}

Ich finde, logisch gesehen, müsste auch beim ersten Aufruf "bar"
ausgegeben werden. Probleme wirft das insbesondere auf, wenn man mehrere
optionale Parameter hat, von denen man "in der Mitte" default auf
bestimmte Werte (außer null) setzen will.

Jens
Jens Sieckmann
 
Posts: 16
Joined: Thu Jul 17, 2003 6:17 am

=?ISO-8859-15?Q?Re=3A_Optionaler_Parameter_mit_Default-W?= =?ISO-8859-15?Q?ert_und_null-=DCbergabe?

Postby Jens Sieckmann on Wed Dec 03, 2008 6:34 am

Jens Sieckmann schrieb:

[...]

> Ich finde, logisch gesehen, müsste auch beim ersten Aufruf "bar"
> ausgegeben werden. Probleme wirft das insbesondere auf, wenn man mehrere
> optionale Parameter hat, von denen man "in der Mitte" default auf
> bestimmte Werte (außer null) setzen will.

Natürlich kann man mit is_null oder func_get_args in der Funktion/Mehode
arbeiten. Aber kann ja sein, dass man den Code nicht ändern darf.

Jens
Jens Sieckmann
 
Posts: 16
Joined: Thu Jul 17, 2003 6:17 am

=?ISO-8859-15?Q?Re=3A_Optionaler_Parameter_mit_Default-W?= =?ISO-8859-15?Q?ert_und_null-=DCbergabe?

Postby Christoph Herrmann on Wed Dec 03, 2008 6:41 am

Jens Sieckmann schrieb:
> Ich finde, logisch gesehen, müsste auch beim ersten Aufruf "bar"
> ausgegeben werden. Probleme wirft das insbesondere auf, wenn man mehrere
> optionale Parameter hat, von denen man "in der Mitte" default auf
> bestimmte Werte (außer null) setzen will.

"null" ist halt ein Wert und somit greift der Default nicht mehr. Hier
vermisse ich dann auch die Möglichkeit Methoden zu überladen, wie es in
Java der Fall wäre.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann
 
Posts: 1017
Joined: Wed Sep 05, 2007 3:27 pm

Re: Optionaler Parameter mit Default-Wert und =?UTF-8?Q?null=2D=C3=9Cbergabe?=

Postby Stefan Froehlich on Wed Dec 03, 2008 6:44 am

On Wed, 03 Dec 2008 14:34:20 +0100 Jens Sieckmann wrote:
> > Ich finde, logisch gesehen, müsste auch beim ersten Aufruf "bar"
> > ausgegeben werden. Probleme wirft das insbesondere auf, wenn man
> > mehrere optionale Parameter hat, von denen man "in der Mitte"
> > default auf bestimmte Werte (außer null) setzen will.

> Natürlich kann man mit is_null oder func_get_args in der
> Funktion/Mehode arbeiten.

Genau das wollte ich gerade vorschlagen:

| function xyz($arg=NULL) {
| if (is_null($arg)) $arg = 2;
| }

> Aber kann ja sein, dass man den Code nicht ändern darf.

Dann hat man (in PHP) einfach Pech gehabt. Ob das gut und sinnvoll so
ist, steht auf einem anderen Blatt.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Stefan - denn dumme Liebe grapscht nicht.
(Sloganizer)
Stefan Froehlich
 
Posts: 414
Joined: Thu Oct 21, 2004 2:26 pm

=?ISO-8859-15?Q?Re=3A_Optionaler_Parameter_mit_Default-W?= =?ISO-8859-15?Q?ert_und_null-=DCbergabe?

Postby Carsten Wiedmann on Wed Dec 03, 2008 6:55 am

Jens Sieckmann schrieb:
> foo(null); // Ausgabe:
> foo(); // Ausgabe: bar
>
> function foo($param = 'bar')
> {
> echo $param;
> }
>
> Ich finde, logisch gesehen, müsste auch beim ersten Aufruf "bar"
> ausgegeben werden. Probleme wirft das insbesondere auf, wenn man mehrere
> optionale Parameter hat, von denen man "in der Mitte" default auf
> bestimmte Werte (außer null) setzen will.

Zuerst fällt mir auf, dass genau dies ja so im Manual beschrieben wird [1].

NULL ist halt auch ein eigener (spezieller) Datentyp, der hier als Wert im
Parameter übergeben wird. Das Defaultvalue greift ja nur, wenn tatsächlich
nichts (kein Parameter) übergeben wird.

Aber um bei deinem Beispiel zu bleiben:
Wie könnte man sonst $param den Wert NULL per Parameter zuweisen? So wie von
dir gewünscht, würde ja PHP sonst $param auch hier automatisch 'bar' zuweisen.

Bei variablen Parametern in der Mitte, muss man halt etwas mehr Code
inverstieren.

Gruß
Carsten

[1]
http://de.php.net/manual/en/functions.arguments.php#functions.arguments.default
Carsten Wiedmann
 
Posts: 878
Joined: Sat Nov 03, 2007 7:12 am

=?ISO-8859-15?Q?Re=3A_Optionaler_Parameter_mit_Default-W?= =?ISO-8859-15?Q?ert_und_null-=DCbergabe?

Postby Ulf Kadner on Wed Dec 03, 2008 7:15 am

Hallo Christoph Herrmann, Du schriebst:

> "null" ist halt ein Wert und somit greift der Default nicht mehr. Hier
> vermisse ich dann auch die Möglichkeit Methoden zu überladen, wie es in
> Java der Fall wäre.

Letzendlich ist die Nutzung von optionalen Parametern die einfachste Art
einer Methoden-Überladung. Zumal das in untypisierten Sprachen wie PHP
mit der Parameterüberladung m.M. nach sogar die sinnvollere Methode ist.
In anderen Sprachen (oft streng typisierte) gibts wiederum keine
optionalen Parameter sondern nur direkte Überladung. C# z.B.

Ich kenne beide Arten und kann nur sagen das beide ihre Vor und
Nachteile haben.

MfG, Ulf
Ulf Kadner
 
Posts: 3148
Joined: Sun Aug 12, 2007 3:41 am

=?ISO-8859-15?Q?Re=3A_Optionaler_Parameter_mit_Default-W?= =?ISO-8859-15?Q?ert_und_null-=DCbergabe?

Postby Christoph Herrmann on Wed Dec 03, 2008 7:47 am

Ulf Kadner schrieb:
> Ich kenne beide Arten und kann nur sagen das beide ihre Vor und
> Nachteile haben.

Dem schließe ich mich an.

Es gibt aber auch Sprachen (wie C++) die Beides anbieten, daher
Überladen durch mehrere Methoden und durch Default Parameter.

In PHP wäre die Unterscheidung eigentlich auch kein Problem mehr durch
das Type Hinting. Ansonsten könnte man die Methoden natürlich auch durch
die Anzahl der Parameter unterscheiden.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann
 
Posts: 1017
Joined: Wed Sep 05, 2007 3:27 pm

=?ISO-8859-15?Q?Re=3A_Optionaler_Parameter_mit_Default-W?= =?ISO-8859-15?Q?ert_und_null-=DCbergabe?

Postby =?ISO-8859-15?Q?Torsten_Z=FChlsdorff?= on Wed Dec 03, 2008 8:47 am

Jens Sieckmann schrieb:

> ich möchte mal einen kleinen Diskussionsanstoß bieten, für eine Sache,
> die mir eigentlich schon hätte früher auffallen müssen. Bei einer
> Funktion/Methode, die optionale Parameter mit Wertzuweisungen in der
> Signatur hat und mit null aufgerufen wird, findet keine Zuweisung des
> Defaultwerts statt. Beispiel:
>
> foo(null); // Ausgabe:
> foo(); // Ausgabe: bar
>
> function foo($param = 'bar')
> {
> echo $param;
> }
>
> Ich finde, logisch gesehen, müsste auch beim ersten Aufruf "bar"
> ausgegeben werden.

Das hängt vom verwendeten Logik-System ab. Steht "null" für "kein Wert",
würdest du "kein Wert übergeben". In dem Fall hättest du Recht. Steht
Null aber für "unbekannter Wert", dann hättest du Unrecht.
Verkompliziert wird das ganze durch Null-Strings, Null-Characters, sowie
Null-Referenzen und in anderen Sprachen auch Null-Pointer.

Ich persönlich finde das an sich nicht verwirrend. Ich übergebe einen
Wert - nämlich "null" - und fertig.

Gruß,
Torsten
--
http://www.dddbl.de/ - ein Datenbank-Layer, der die Arbeit mit 8
verschiedenen Datenbanksystemen abstrahiert,
Queries von Applikationen trennt und automatisch die Query-Ergebnisse
auswerten kann.
=?ISO-8859-15?Q?Torsten_Z=FChlsdorff?=
 
Posts: 214
Joined: Mon Dec 13, 2004 5:33 am

=?ISO-8859-15?Q?Re=3A_Optionaler_Parameter_mit_Default-W?= =?ISO-8859-15?Q?ert_und_null-=DCbergabe?

Postby =?ISO-8859-15?Q?Torsten_Z=FChlsdorff?= on Wed Dec 03, 2008 8:48 am

Christoph Herrmann schrieb:

>> Ich finde, logisch gesehen, müsste auch beim ersten Aufruf "bar"
>> ausgegeben werden. Probleme wirft das insbesondere auf, wenn man mehrere
>> optionale Parameter hat, von denen man "in der Mitte" default auf
>> bestimmte Werte (außer null) setzen will.
>
> "null" ist halt ein Wert und somit greift der Default nicht mehr. Hier
> vermisse ich dann auch die Möglichkeit Methoden zu überladen, wie es in
> Java der Fall wäre.

Überladen mag ja nett sein. Aber in beiden Sprachen fehlen mir *echte*
optionale Parameter, wie z.b. in LISP.

Gruß,
Torsten
--
http://www.dddbl.de/ - ein Datenbank-Layer, der die Arbeit mit 8
verschiedenen Datenbanksystemen abstrahiert,
Queries von Applikationen trennt und automatisch die Query-Ergebnisse
auswerten kann.
=?ISO-8859-15?Q?Torsten_Z=FChlsdorff?=
 
Posts: 214
Joined: Mon Dec 13, 2004 5:33 am

=?iso-8859-15?Q?Re:_Optionaler_Parameter_mit_Default-Wert_und_null-=DCberg?= =?iso-8859-15?Q?abe?=

Postby Johannes Mueller on Wed Dec 03, 2008 9:54 am

Jens Sieckmann wrote:
> Hallo,
>
> ich möchte mal einen kleinen Diskussionsanstoß bieten, für eine Sache,
> die mir eigentlich schon hätte früher auffallen müssen. Bei einer
> Funktion/Methode, die optionale Parameter mit Wertzuweisungen in der
> Signatur hat und mit null aufgerufen wird, findet keine Zuweisung des
> Defaultwerts statt. Beispiel:
>
> foo(null); // Ausgabe:
> foo(); // Ausgabe: bar
>
> function foo($param = 'bar')
> {
> echo $param;
> }
>
> Ich finde, logisch gesehen, müsste auch beim ersten Aufruf "bar"
> ausgegeben werden. Probleme wirft das insbesondere auf, wenn man
> mehrere optionale Parameter hat, von denen man "in der Mitte" default
> auf bestimmte Werte (außer null) setzen will.

Naja, ich würde sowas vermeiden - entweder dadurch, dass ich Arrays benutze,
wie das eigentlich auch viele Frameworks machen, die Parameter ("in der
Mitte") übergeben wollen, oder mit ParameterKlassen, deren Eigenschaften
dann Parameter wiederspiegeln - hier kann man dann auch type-hinting sowohl
für die Eigenschaften der Parameterklasse als auch der aufzurufenden Methode
benutzen.

Wär halt ein Work-around.

Gruß
Johannes

--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.

Johannes Mueller
 
Posts: 576
Joined: Thu Jun 15, 2006 2:18 pm

Next

Return to Sonstige Fragen zu Anwendung und Programmierung (de.comp.lang.php.misc)

Who is online

Users browsing this forum: No registered users and 0 guests