<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.functions.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'functions.arguments.php',
    1 => 'Funktionsparameter und -argumente',
    2 => 'Funktionsparameter und -argumente',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'Funktionen',
  ),
  'prev' => 
  array (
    0 => 'functions.user-defined.php',
    1 => 'Benutzerdefinierte Funktionen',
  ),
  'next' => 
  array (
    0 => 'functions.returning-values.php',
    1 => 'R&uuml;ckgabewerte',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/functions.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="functions.arguments" class="sect1">
   <h2 class="title">Funktionsparameter und -argumente</h2>
   <p class="simpara">
    Die Funktionsparameter werden in der Signatur der Funktion deklariert.
    Mit einer Liste von Argumenten kann man Informationen an eine Funktion
    übergeben. Die Argumentenliste ist eine durch Kommas getrennte Liste von
    Ausdrücken. Die Argumente werden von links nach rechts ausgewertet und das
    Ergebnis wird den Parametern der Funktion zugewiesen, bevor die eigentliche
    Funktion aufgerufen wird, d. h. mit der sog.
    <em>eager</em>-Evaluation (dt. eifrige Auswertung).
   </p>
   <p class="para">
    PHP unterstützt die Weitergabe von Parametern als Werte (das ist der
    Standard), als
    <a href="functions.arguments.php#functions.arguments.by-reference" class="link">Verweise</a> und als
    <a href="functions.arguments.php#functions.arguments.default" class="link">Vorgabewerte</a>. Eine
    <a href="functions.arguments.php#functions.variable-arg-list" class="link">variable Anzahl von Parametern</a>
    und <a href="functions.arguments.php#functions.named-arguments" class="link">benannte Parameter</a> werden
    ebenfalls unterstützt.
   </p>
   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <p class="para">
     Seit PHP 7.3.0 ist es möglich, in der Argumentliste eines Funktionsaufrufs
     ein nachgestelltes Komma zu verwenden:
     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$v </span><span style="color: #007700">= </span><span style="color: #0000BB">foo</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$arg_1</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$arg_2</span><span style="color: #007700">,<br />);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </div>
    </p>
   </p></blockquote>
   <p class="para">
    Seit PHP 8.0.0 kann die Liste der Funktionsparameter ein nachgestelltes
    Komma enthalten, das ignoriert wird. Das ist besonders nützlich in Fällen,
    in denen die Liste der Parameter lang ist oder lange Variablennamen
    enthält, sodass es praktisch ist, die Parameter vertikal aufzulisten.
   </p>
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 Liste von Funktionsparametern mit nachgestelltem Komma</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">takes_many_args</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$first_arg</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$second_arg</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$a_very_long_argument_name</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$arg_with_default </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$again </span><span style="color: #007700">= </span><span style="color: #DD0000">'a default string'</span><span style="color: #007700">, </span><span style="color: #FF8000">// Dieses nachgestellte Komma war vor 8.0.0<br />                                 // nicht erlaubt.<br /></span><span style="color: #007700">)<br />{<br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="sect2" id="functions.arguments.by-reference">
    <h3 class="title">Parameter als Verweise übergeben</h3>

    <p class="simpara">
     Normalerweise werden den Funktionen Werte als Parameter übermittelt. Wenn
     man also den Wert dieser Parameter innerhalb der Funktion ändert, bleiben
     sie außerhalb der Funktion unverändert. Wollen Sie aber erreichen, dass
     die Änderung auch außerhalb der Funktion sichtbar wird, müssen Sie die
     Parameter als Verweise (Referenzen) übergeben.
    </p>
    <p class="para">
     Wenn eine Funktion einen Parameter generell als Verweis behandeln soll,
     setzt man in der Funktionsdefinition ein kaufmännisches Und (&amp;) vor
     den Parameternamen:
    </p>
    <p class="para">
     <div class="example" id="example-2">
      <p><strong>Beispiel #2 Übergeben von Funktionsparametern als Verweis</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">fuege_etwas_an</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$string</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$string </span><span style="color: #007700">.= </span><span style="color: #DD0000">'und etwas mehr.'</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Dies ist ein String, '</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">fuege_etwas_an</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$str</span><span style="color: #007700">; </span><span style="color: #FF8000">// Ausgabe: 'Dies ist ein String, und etwas mehr.'<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </div>
    </p>
    <p class="para">
     Es ist ein Fehler, einen konstanten Ausdruck als Argument an einen
     Parameter zu übergeben, der eigentlich als Referenz übergeben werden
     müsste.
    </p>
   </div>
   <div class="sect2" id="functions.arguments.default">
    <h3 class="title">Vorgabewerte für Parameter</h3>

    <p class="para">
     Eine Funktion kann Standardwerte für Parameter definieren, indem sie eine
     ähnliche Syntax wie bei der Zuweisung von Variablen verwendet. Der
     Standardwert wird nur verwendet, wenn für den Parameter kein Argument
     übergeben wurde. Es ist zu beachten, dass bei der Übergabe von <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>
     <em>nicht</em> der Standardwert zugewiesen wird.
    </p>
    <p class="para">
     <div class="example" id="example-3">
      <p><strong>Beispiel #3 Einsatz von Vorgabeparametern in Funktionen</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">machkaffee</span><span style="color: #007700">(</span><span style="color: #0000BB">$typ </span><span style="color: #007700">= </span><span style="color: #DD0000">"Cappuccino"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Ich mache eine Tasse </span><span style="color: #0000BB">$typ</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">machkaffee</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">machkaffee</span><span style="color: #007700">(</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">machkaffee</span><span style="color: #007700">(</span><span style="color: #DD0000">"Espresso"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Ich mache eine Tasse Cappuccino.
Ich mache eine Tasse .
Ich mache eine Tasse Espresso.
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Die Standardwerte der Parameter können skalare Werte,
     <span class="type"><a href="language.types.array.php" class="link">Array</a></span>s, der spezielle Typ <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> und seit PHP 8.1.0 auch
     Objekte sein, die die
     <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new ClassName()</a>-Syntax
     verwenden.
    </p>
    <p class="para">
     <div class="example" id="example-4">
      <p><strong>Beispiel #4 Nichtskalare Typen als Vorgabewert</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">(</span><span style="color: #0000BB">$types </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"Cappuccino"</span><span style="color: #007700">), </span><span style="color: #0000BB">$coffeeMaker </span><span style="color: #007700">= </span><span style="color: #0000BB">NULL</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$device </span><span style="color: #007700">= </span><span style="color: #0000BB">is_null</span><span style="color: #007700">(</span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">) ? </span><span style="color: #DD0000">"Hand" </span><span style="color: #007700">: </span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">;<br />    return </span><span style="color: #DD0000">"Ich mache eine Tasse "</span><span style="color: #007700">.</span><span style="color: #0000BB">join</span><span style="color: #007700">(</span><span style="color: #DD0000">", "</span><span style="color: #007700">, </span><span style="color: #0000BB">$types</span><span style="color: #007700">).</span><span style="color: #DD0000">" mit der </span><span style="color: #0000BB">$device</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">(array(</span><span style="color: #DD0000">"Cappuccino"</span><span style="color: #007700">, </span><span style="color: #DD0000">"Lavazza"</span><span style="color: #007700">), </span><span style="color: #DD0000">"Teekanne"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Ich mache eine Tasse Cappuccino mit der Hand.
Ich mache eine Tasse Cappuccino, Lavazza mit der Teekanne.
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     <div class="example" id="example-5">
      <p><strong>Beispiel #5 Verwendung von Objekten als Standardwerte (seit PHP 8.1.0)</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">DefaultCoffeeMaker </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">brew</span><span style="color: #007700">() {<br />        return </span><span style="color: #DD0000">"Koche Kaffee.\n"</span><span style="color: #007700">;<br />    }<br />}<br />class </span><span style="color: #0000BB">FancyCoffeeMaker </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">brew</span><span style="color: #007700">() {<br />        return </span><span style="color: #DD0000">"Bereite einen schönen Kaffee für Dich zu.\n"</span><span style="color: #007700">;<br />    }<br />}<br />function </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">(</span><span style="color: #0000BB">$coffeeMaker </span><span style="color: #007700">= new </span><span style="color: #0000BB">DefaultCoffeeMaker</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">brew</span><span style="color: #007700">();<br />}<br />echo </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">(new </span><span style="color: #0000BB">FancyCoffeeMaker</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>


      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Koche Kaffee.
Bereite einen schönen Kaffee für Dich zu.
</pre></div>
      </div>
     </div>
    </p>
    <p class="simpara">
     Der Vorgabewert muss ein konstanter Ausdruck sein, darf also zum Beispiel
     keine Variable, keine Eigenschaft einer Klasse und kein Funktionsaufruf
     sein.
    </p>
    <p class="para">
     Es ist zu beachten, dass optionale Parameter nach den erforderlichen
     Parametern angegeben werden müssen, da sie sonst bei einem Aufruf nicht
     weggelassen werden können. Das nachfolgende Beispiel verdeutlicht dies:
    </p>
    <p class="para">
     <div class="example" id="example-6">
      <p><strong>Beispiel #6 Ungültige Verwendung von Funktionsparametern mit Vorgabewerten</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">mach_joghurt</span><span style="color: #007700">(</span><span style="color: #0000BB">$typ </span><span style="color: #007700">= </span><span style="color: #DD0000">"rechtsdrehendes"</span><span style="color: #007700">, </span><span style="color: #0000BB">$geschmack</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Mache einen Becher </span><span style="color: #0000BB">$typ</span><span style="color: #DD0000"> </span><span style="color: #0000BB">$geschmack</span><span style="color: #DD0000">-Joghurt.\n"</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">mach_joghurt</span><span style="color: #007700">(</span><span style="color: #DD0000">"Brombeer"</span><span style="color: #007700">); </span><span style="color: #FF8000">// "Brombeer" ist $typ, nicht $geschmack<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Zum Vergleich mit obigem Beispiel::
    </p>
    <p class="para">
     <div class="example" id="example-7">
      <p><strong>Beispiel #7 Richtiger Einsatz von  Funktionsparametern mit Vorgabewerten</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">mach_joghurt</span><span style="color: #007700">(</span><span style="color: #0000BB">$geschmack</span><span style="color: #007700">, </span><span style="color: #0000BB">$typ </span><span style="color: #007700">= </span><span style="color: #DD0000">"rechtsdrehendes"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Mache einen Becher </span><span style="color: #0000BB">$typ</span><span style="color: #DD0000"> </span><span style="color: #0000BB">$geschmack</span><span style="color: #DD0000">-Joghurt.\n"</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">mach_joghurt</span><span style="color: #007700">(</span><span style="color: #DD0000">"Brombeer"</span><span style="color: #007700">); </span><span style="color: #FF8000">// "Brombeer" ist $geschmack<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Mache einen Becher rechtsdrehendes Brombeer-Joghurt.
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Seit PHP 8.0.0 können
     <a href="functions.arguments.php#functions.named-arguments" class="link">benannte Argumente</a>
     verwendet werden, um mehrere optionale Parameter zu überspringen.
    </p>
    <p class="para">
     <div class="example" id="example-8">
      <p><strong>Beispiel #8 Korrekte Verwendung von Funktionsparametern mit Vorgabewerten</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">makeyogurt</span><span style="color: #007700">(</span><span style="color: #0000BB">$container </span><span style="color: #007700">= </span><span style="color: #DD0000">"bowl"</span><span style="color: #007700">, </span><span style="color: #0000BB">$flavour </span><span style="color: #007700">= </span><span style="color: #DD0000">"raspberry"</span><span style="color: #007700">, </span><span style="color: #0000BB">$style </span><span style="color: #007700">= </span><span style="color: #DD0000">"Greek"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Making a </span><span style="color: #0000BB">$container</span><span style="color: #DD0000"> of </span><span style="color: #0000BB">$flavour</span><span style="color: #DD0000"> </span><span style="color: #0000BB">$style</span><span style="color: #DD0000"> yogurt.\n"</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">makeyogurt</span><span style="color: #007700">(</span><span style="color: #0000BB">style</span><span style="color: #007700">: </span><span style="color: #DD0000">"natural"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Making a bowl of raspberry natural yogurt.
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Seit PHP 8.0.0 wird die Angabe von obligatorischen Parametern nach
     optionalen Parametern <em>missbilligt</em>. Dies kann im
     Allgemeinen durch das Weglassen des Standardwertes gelöst werden, da er
     nie verwendet wird. Eine Ausnahme von dieser Regel sind Parameter der Form
     <code class="code">Type $param = null</code>, wobei der Standardwert <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> den Typ
     implizit nullbar macht. Diese Verwendung ist seit PHP 8.4.0 veraltet und
     stattdessen sollte ein expliziter
     <a href="language.types.declarations.php#language.types.declarations.nullable" class="link">nullable Typ</a>
     verwendet werden.
     <div class="example" id="example-9">
      <p><strong>Beispiel #9 Angabe von optionalen Parametern nach obligatorischen Parametern</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">= [], </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}     </span><span style="color: #FF8000">// Standardwert wird nicht verwendet;<br />                                 // seit PHP 8.0.0 veraltet<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}          </span><span style="color: #FF8000">// Funktionell identisch, aber ohne Veraltet-Hinweis<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(</span><span style="color: #0000BB">A $a </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {} </span><span style="color: #FF8000">// Seit PHP 8.1.0 ist $a implizit erforderlich<br />                                 // (da es vor dem erforderlichen Parameter steht),<br />                                 // aber implizit löschbar (seit PHP 8.4.0 veraltet),<br />                                 // da der Standardparameterwert null ist<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(?</span><span style="color: #0000BB">A $a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}       </span><span style="color: #FF8000">// Empfohlen<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </div>
    </p>
    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <span class="simpara">
      Seit PHP 7.1.0 wird ein <span class="classname"><a href="class.argumentcounterror.php" class="classname">ArgumentCountError</a></span>
      ausgelöst, wenn ein Parameter weggelassen wird, für den kein Standardwert
      angegeben ist; in früheren Versionen löste es eine Warnung aus.
     </span>
    </p></blockquote>
    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <span class="simpara">
      Parameter, die ein Argument per Verweis erwarten, dürfen einen Standardwert
      haben.
     </span>
    </p></blockquote>
   </div>

   <div class="sect2" id="functions.variable-arg-list">
    <h3 class="title">Variable Anzahl von Argumenten</h3>
    <p class="simpara">
     PHP unterstützt eine variable Anzahl an Argumenten in benutzerdefinierten
     Funktionen durch Verwendung des <code class="literal">...</code>-Tokens.
    </p>
    <p class="para">
     Eine Liste von Parametern kann das Token <code class="literal">...</code>
     enthalten, um anzugeben, dass die Funktion eine variable Anzahl von
     Argumenten akzeptiert. Die Argumente werden als <a href="language.types.array.php" class="link">Array</a> an die
     entsprechende Variable übergeben:
     <div class="example" id="example-10">
      <p><strong>Beispiel #10 Verwendung von <code class="literal">...</code> für den Zugriff auf variable Argumente</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">sum</span><span style="color: #007700">(...</span><span style="color: #0000BB">$numbers</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$acc </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    foreach (</span><span style="color: #0000BB">$numbers </span><span style="color: #007700">as </span><span style="color: #0000BB">$n</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$acc </span><span style="color: #007700">+= </span><span style="color: #0000BB">$n</span><span style="color: #007700">;<br />    }<br />    return </span><span style="color: #0000BB">$acc</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">4</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
10
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Das Token <code class="literal">...</code> kann auch dazu verwendet werden, um ein
     <span class="type"><a href="language.types.array.php" class="link">Array</a></span> oder ein <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span>-Objekt als
     Liste von Argumenten zu übergeben:
     <div class="example" id="example-11">
      <p><strong>Beispiel #11 Verwendung von <code class="literal">...</code> zur Übergabe einer Argumentenliste</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {<br />    return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">add</span><span style="color: #007700">(...[</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">]).</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">];<br />echo </span><span style="color: #0000BB">add</span><span style="color: #007700">(...</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
3
3
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Die Definition von regulären, positionierten Parametern vor dem
     <code class="literal">...</code> ist natürlich weiterhin möglich. In einem solchen
     Fall werden dann nur die zusätzlichen Werte, die zu keinem positionierten
     Parameter gehören, in das durch <code class="literal">...</code> erzeugte Array
     übernommen.
    </p>
    <p class="para">
     Es ist zudem auch möglich, dem <code class="literal">...</code>-Token eine
     <a href="language.types.declarations.php" class="link">Typdeklaration</a>
     voranzustellen. Ist dies der Fall, dann müssen alle Argumente, die von
     <code class="literal">...</code> erfasst werden, vom entsprechenden Typ sein.
     <div class="example" id="example-12">
      <p><strong>Beispiel #12 Variable Argumente mit Typdeklaration</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">total_intervals</span><span style="color: #007700">(</span><span style="color: #0000BB">$unit</span><span style="color: #007700">, </span><span style="color: #0000BB">DateInterval </span><span style="color: #007700">...</span><span style="color: #0000BB">$intervals</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$time </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    foreach (</span><span style="color: #0000BB">$intervals </span><span style="color: #007700">as </span><span style="color: #0000BB">$interval</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$time </span><span style="color: #007700">+= </span><span style="color: #0000BB">$interval</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$unit</span><span style="color: #007700">;<br />    }<br />    return </span><span style="color: #0000BB">$time</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">'P1D'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">'P2D'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">total_intervals</span><span style="color: #007700">(</span><span style="color: #DD0000">'d'</span><span style="color: #007700">, </span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">).</span><span style="color: #DD0000">' days'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Dieser Aufruf wird scheitern, da null keine Instanz von DateInterval ist<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">total_intervals</span><span style="color: #007700">(</span><span style="color: #DD0000">'d'</span><span style="color: #007700">, </span><span style="color: #0000BB">null</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Durch ein voran gestelltes <code class="literal">&amp;</code> ist auch die Übergabe
     von variablen Argumenten
     <a href="functions.arguments.php#functions.arguments.by-reference" class="link">als Referenz</a>
     möglich.
    </p>

   </div>

   <div class="sect2" id="functions.named-arguments">
    <h3 class="title">Benannte Argumente</h3>
    <p class="para">
     PHP 8.0.0 führt benannte Argumente als eine Erweiterung der bestehenden
     Positionsparameter ein. Benannte Argumente ermöglichen die Übergabe von
     Argumenten an eine Funktion basierend auf dem Parameternamen und nicht
     auf der Position des Parameters. Das macht die Bedeutung von Argumenten
     selbsterklärend, macht die Argumente unabhängig von der Reihenfolge und
     ermöglicht das willkürliche Überspringen von Standardwerten.
    </p>
    <p class="para">
     Benannte Argumente werden übergeben, indem dem Wert der Parametername
     gefolgt von einem Doppelpunkt vorangestellt wird. Reservierte
     Schlüsselwörter dürfen als Parameternamen verwendet werden. Der
     Parametername muss ein Bezeichner sein; eine dynamische Angabe ist nicht
     erlaubt.
    </p>
    <div class="example" id="example-13">
     <p><strong>Beispiel #13 Syntax benannter Argumente</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />myFunction</span><span style="color: #007700">(</span><span style="color: #0000BB">paramName</span><span style="color: #007700">: </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">array_foobar</span><span style="color: #007700">(array: </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Wird NICHT unterstützt<br /></span><span style="color: #0000BB">function_name</span><span style="color: #007700">(</span><span style="color: #0000BB">$variableStoringParamName</span><span style="color: #007700">: </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <div class="example" id="example-14">
     <p><strong>Beispiel #14 Positionsargumente im Vergleich zu benannten Argumenten</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Verwendung von Positionsargumenten:<br /></span><span style="color: #0000BB">array_fill</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">50</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Verwendung von benannten Argumenten:<br /></span><span style="color: #0000BB">array_fill</span><span style="color: #007700">(</span><span style="color: #0000BB">start_index</span><span style="color: #007700">: </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">count</span><span style="color: #007700">: </span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">value</span><span style="color: #007700">: </span><span style="color: #0000BB">50</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <p class="para">
     Die Reihenfolge, in der die benannten Argumente übergeben werden, spielt
     keine Rolle.
    </p>
    <div class="example" id="example-15">
     <p><strong>Beispiel #15 Das gleiche Beispiel wie oben mit einer anderen Reihenfolge der Parameter</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />array_fill</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">: </span><span style="color: #0000BB">50</span><span style="color: #007700">, </span><span style="color: #0000BB">count</span><span style="color: #007700">: </span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">start_index</span><span style="color: #007700">: </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <p class="para">
     Benannte Argumente können mit Positionsargumenten kombiniert werden. In
     diesem Fall müssen die benannten Argumente nach den Positionsargumenten
     kommen. Es ist auch möglich, nur einige der optionalen Argumente einer
     Funktion anzugeben, unabhängig von ihrer Reihenfolge.
    </p>
    <div class="example" id="example-16">
     <p><strong>Beispiel #16 Kombinieren von benannten Argumenten mit Positionsargumenten</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">, </span><span style="color: #0000BB">double_encode</span><span style="color: #007700">: </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Ist das Gleiche wie<br /></span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">, </span><span style="color: #0000BB">ENT_QUOTES </span><span style="color: #007700">| </span><span style="color: #0000BB">ENT_SUBSTITUTE </span><span style="color: #007700">| </span><span style="color: #0000BB">ENT_HTML401</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <p class="para">
     Die mehrfache Übergabe eines Arguments an denselben benannten Parameter
     führt zu einer <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception.
    </p>
    <div class="example" id="example-17">
     <p><strong>Beispiel #17 Die mehrfache Übergabe eines Arguments an denselben benannten Parameter erzeugt einen Fehler</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">) { ... }<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">param</span><span style="color: #007700">: </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">param</span><span style="color: #007700">: </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Error: Named parameter $param overwrites previous argument<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">param</span><span style="color: #007700">: </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Error: Named parameter $param overwrites previous argument<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <p class="para">
     Seit PHP 8.1.0 ist es möglich, benannte Argumente nach dem Entpacken von
     Argumenten zu verwenden. Ein bereits entpacktes Argument
     <em>darf nicht</em> durch einen benanntes Argument
     überschrieben werden.
    </p>

    <div class="example" id="example-18">
    <p><strong>Beispiel #18 Verwendung benannter Argumente nach dem Entpacken</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">) {<br />  return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b </span><span style="color: #007700">+ </span><span style="color: #0000BB">$c </span><span style="color: #007700">+ </span><span style="color: #0000BB">$d</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(...[</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">], </span><span style="color: #0000BB">d</span><span style="color: #007700">: </span><span style="color: #0000BB">40</span><span style="color: #007700">)); </span><span style="color: #FF8000">// 46<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(...[</span><span style="color: #DD0000">'b' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'a' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">], </span><span style="color: #0000BB">d</span><span style="color: #007700">: </span><span style="color: #0000BB">40</span><span style="color: #007700">)); </span><span style="color: #FF8000">// 46<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(...[</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">], </span><span style="color: #0000BB">b</span><span style="color: #007700">: </span><span style="color: #0000BB">20</span><span style="color: #007700">)); </span><span style="color: #FF8000">// Fataler Fehler. Der benannte Parameter $b überschreibt das vorherige Argument<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

   </div>
  </div><?php manual_footer($setup); ?>