Nur einen von mehreren Parametern bei Funktionsaufruf definieren

DrEvil

Erfahrenes Mitglied
Hallo Community,
eine kurze Frage:
Kann ich bei einer eigenen Funktion, der ich bspw. 3 Parameter samt default-Werten in der Funktionsdefinition zugewiesen habe, auch einen Funktionsaufruf machen und nur einen Parameter "umbelegen"?

z.B.:
PHP:
function funktion_mit_default_parametern($parameter1 = 'Wert', $parameter2 = 0, $parameter3 = 'andererWert'){
// Funktionsteil...
}

Jetzt kann ich die Funktion ja entweder mit
PHP:
funktion_mit_default_parametern();
oder mit
PHP:
funktion_mit_default_parametern('neuerWert', 1, 'wiederneuerWert');
aufrufen.

Ich möchte aber z.B. nur Parameter 3 anpassen und sonst die default-Werte nutzen.

Habe schon
PHP:
funktion_mit_default_parametern($parameter3 = 'wiederneuerWert');
probiert. Das hat nur leider nicht geklappt.


Ich hoffe ihr könnt mir helfen. Danke schon mal!
 
Hallo,
so direkt wie du dir das vorstellst geht das leider nicht. Schau dir mal das Beispiel 5 hier an http://php.net/manual/de/functions.arguments.php.

Ich würde das folgender Maßen lösen:

PHP:
<?php
function funktion_mit_default_parametern()
{
	// Anzahl der übergebenen Parameter
        $count = func_num_args();
	// ausgabe der Parameter
        for($i=0;$i<$count;$i++)
	{
		echo func_get_arg($i)."<br>";
	}
}

test("Para1","Para2","Para3");
?>
oder so:

PHP:
<?php
function funktion_mit_default_parametern()
{
	print_r(func_get_args());
}

funktion_mit_default_parametern("Para1","Para2","Para3");
?>
Mit freundlichen Grüßen
Leon Bergmann
 
Zuletzt bearbeitet:
Achso, da hab ich mein Anliegen wohl nicht richtig rübergebracht :rolleyes:

Die einzelnen Parameter benötige ich, um das Verhalten der Funktion zu beeinflussen. Sie sind in dem Sinne also nicht beliebig, bzw. werden nicht alle für die gleiche "Verarbeitung" herangezogen (wie es bei dem php.net-Bsp. ist).

Ein fixes (vielleicht nicht ganz sinniges) Beispiel wäre:
PHP:
function funktion_mit_default_parametern($count = 3, $mode = 'echo') {
$string = '';

for($i = 0; $i <= $count; $i++){
   $string .= ', '.$i;
}

switch ($mode) {
   case 'echo':
      echo $string;
      break;
   case 'return':
      return $string;
      break;
}

}

Wenn ich die Funktion ohne Parameterangaben aufrufe, würde ja sowas (per echo) zurück kommen:
HTML:
0, 1, 2, 3

Jetzt möchte ich aber den Echo-"Modus" behalten und nur $count im Funktionsaufruf verändern und auf 5 setzen, so z.B. :
PHP:
funktion_mit_default_parametern($count = 5);
Aber das funktioniert ja leider nicht.
 
MMH bei deinem Beispiel gibt es bei mir keinerlei Probleme, weil du die Reinfolge beachtet hast, dein Problem in deinem ersten Beispiel ist das du nur den Letzen Optionalen Parameter übergeben willst, dieser wird aber als erster Parameter Interpretiert. Vllt. solltest du über die Reinfolge deiner Parameter nach denken.
 
Hilft es dir wenn du die Parameter nicht einzeln sondern als Array an die Funktion übergibst:

PHP:
<?php
function test ($wert){

$default = array("eins" => "one", "zwei" => "two", "drei" => "three");

$erg = array_merge($default, $wert);

return "Die erste Zahl war " .$erg["eins"] .", die zweite war " .$erg["zwei"] .", und die dritte war " .$erg["drei"];

}

echo test($wert = array("eins" => "eins", "drei" => "drei"));

?>

So könntest du die gewünschten Parameter an die Funktion übergeben und die fehlenden werden durch die in der Funktion angegebenen Default-Werte belegt.
 
Dazu habe ich vor fast genau 2 Jahren mal etwas in mein Wikki geschrieben
PHP Funktionsaufruf mit variablen benamsten Parametern

PHP:
function myfunction($title='default', $id=999) {
     if (is_array($params=func_get_arg (0))) extract($params,EXTR_OVERWRITE);
     return "{$id}: {$titel} ";
}

echo myfunction('Test');                                   //999: Test
echo myfunction(1, 'Test_verkehrt');                       //Test_verkehrt: 1
echo myfunction(array('id'=>2, 'titel'=>'noch ein Test')); //2: noch ein Test
echo myfunction(array('id'=>3));                           //3: default
 
Zurück