Die drei Punkte ... gehören zu den vielseitigsten Werkzeugen in PHP. Der sogenannte Spread Operator (auch als Splat Operator bezeichnet) entpackt Arrays in einzelne Elemente, übergibt Funktionsargumente dynamisch und führt mehrere Arrays in einem einzigen Ausdruck zusammen. Seit PHP 5.6 steht Argument Unpacking zur Verfügung, seit PHP 7.4 funktioniert der Operator auch in Array Ausdrücken und seit PHP 8.1 werden sogar assoziative Arrays mit String Keys unterstützt. Dieses Tutorial erklärt alle Einsatzbereiche mit praxisnahen Codebeispielen.

Bevor die einzelnen Einsatzbereiche im Detail behandelt werden, klärt der folgende Abschnitt, was der Spread Operator genau ist und in welchen Kontexten PHP ihn erkennt.
Was ist der Spread Operator?
Der Spread Operator besteht aus drei aufeinanderfolgenden Punkten (...) und wird direkt vor einem Array oder einer Variable platziert. Er entpackt die enthaltenen Elemente, sodass sie einzeln an der jeweiligen Stelle eingefügt werden. PHP verwendet denselben Operator in drei unterschiedlichen Kontexten: beim Aufruf von Funktionen (Argument Unpacking), bei der Definition variadischer Funktionen und innerhalb von Array Ausdrücken.
Das folgende Diagramm zeigt die drei Einsatzbereiche und die jeweilige PHP Version, seit der sie verfügbar sind.
flowchart TD
A["Spread Operator: drei Punkte"] --> B["Argument Unpacking"]
A --> C["Array Entpackung"]
A --> D["Variadische Funktion"]
B --> E["Funktionsaufruf seit PHP 5.6"]
C --> F["Array-Ausdruck seit PHP 7.4"]
C --> G["String Keys seit PHP 8.1"]
D --> H["Beliebig viele Argumente"]
Je nach Kontext entpackt der Operator ein Array in einzelne Argumente oder sammelt umgekehrt mehrere Argumente zu einem Array. Diese Doppelrolle macht ihn besonders flexibel.
Argument Unpacking in Funktionsaufrufen
Seit PHP 5.6 kann ein Array mit dem Spread Operator direkt als Argumentliste an eine Funktion übergeben werden. Dabei wird jedes Element des Arrays einem Parameter der Funktion zugeordnet.
<?php
function addiere(int $a, int $b, int $c): int
{
return $a + $b + $c;
}
$zahlen = [10, 20, 30];
echo addiere(...$zahlen); /* 60 */
Der Aufruf addiere(...$zahlen) entpackt das Array, sodass $a den Wert 10, $b den Wert 20 und $c den Wert 30 erhält. Ohne den Spread Operator müsste jedes Element einzeln mit seinem Index übergeben werden. Das Argument Unpacking funktioniert auch mit assoziativen Arrays, wenn die Schlüssel den Parameternamen entsprechen.
<?php
function begruessung(string $vorname, string $nachname): string
{
return 'Hallo ' . $vorname . ' ' . $nachname;
}
$person = ['nachname' => 'Meier', 'vorname' => 'Anna'];
echo begruessung(...$person); /* Hallo Anna Meier */
PHP ordnet die Werte anhand der Schlüsselnamen den passenden Parametern zu. Die Reihenfolge im Array spielt dabei keine Rolle, entscheidend ist allein die Übereinstimmung der Schlüssel mit den Parameternamen.
Variadische Funktionen
In der Funktionsdefinition dient der Spread Operator dazu, eine beliebige Anzahl von Argumenten entgegenzunehmen. Solche Funktionen werden als variadisch bezeichnet.
<?php
function summe(int ...$zahlen): int
{
return array_sum($zahlen);
}
echo summe(1, 2, 3, 4, 5); /* 15 */
echo summe(10, 20); /* 30 */
echo summe(42); /* 42 */
Der Parameter ...$zahlen sammelt alle übergebenen Argumente in einem Array. Innerhalb der Funktion steht $zahlen dann als gewöhnliches Array zur Verfügung. Der variadische Parameter muss immer der letzte in der Parameterliste sein. Vor ihm können beliebig viele reguläre Parameter stehen.
Arrays entpacken und zusammenführen
Seit PHP 7.4 lässt sich der Spread Operator auch direkt innerhalb von Array Ausdrücken verwenden. Damit können mehrere Arrays in einem einzigen Schritt zusammengeführt werden.
<?php
$erste = [1, 2, 3];
$zweite = [4, 5, 6];
$zusammen = [...$erste, ...$zweite];
print_r($zusammen);
/*
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)
*/
/* Einzelne Elemente dazwischen einfügen */
$erweitert = [...$erste, 99, ...$zweite];
print_r($erweitert);
/*
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 99
[4] => 4
[5] => 5
[6] => 6
)
*/
Der Spread Operator kann beliebig oft im selben Ausdruck vorkommen. Zwischen den entpackten Arrays lassen sich auch einzelne Werte einfügen. Wichtig ist dabei, dass nur Arrays und Objekte vom Typ Traversable entpackt werden können. Der Operator erstellt stets eine flache Kopie, verschachtelte Arrays oder Objekte werden also als Referenz übernommen und nicht tief kopiert.
String Keys seit PHP 8.1
Vor PHP 8.1 konnte der Spread Operator in Array Ausdrücken ausschließlich mit numerischen Keys arbeiten. Der Versuch, ein assoziatives Array mit String Keys zu entpacken, führte zu einem Fehler. Seit PHP 8.1 ist diese Einschränkung aufgehoben.
<?php
$standard = ['farbe' => 'blau', 'groesse' => 'M'];
$eigene = ['farbe' => 'rot'];
$config = [...$standard, ...$eigene];
print_r($config);
/*
Array
(
[farbe] => rot
[groesse] => M
)
*/
Bei doppelten String Keys überschreibt der spätere Wert den früheren. In diesem Beispiel wird farbe zuerst auf blau gesetzt und anschließend durch rot aus dem zweiten Array ersetzt. Dieses Verhalten entspricht dem von array_merge() und eignet sich hervorragend für Konfigurationsszenarien, bei denen Standardwerte durch benutzerdefinierte Einstellungen überschrieben werden sollen.
Spread Operator vs. array_merge()
Der Spread Operator und die Funktion array_merge() erzeugen bei der Zusammenführung von Arrays in den meisten Fällen identische Ergebnisse. Dennoch gibt es Unterschiede, die bei der Wahl des passenden Ansatzes relevant sind.
<?php
$a = [1, 2];
$b = [3, 4];
/* Beide Varianten erzeugen das gleiche Ergebnis */
$mitSpread = [...$a, ...$b];
$mitMerge = array_merge($a, $b);
print_r($mitSpread); /* [1, 2, 3, 4] */
print_r($mitMerge); /* [1, 2, 3, 4] */
/* Unterschied: Der Spread Operator erlaubt Elemente dazwischen */
$gemischt = [...$a, 'extra', ...$b];
print_r($gemischt); /* [1, 2, 'extra', 3, 4] */
Der Spread Operator bietet eine kompaktere und oft besser lesbare Syntax. Einzelne Werte lassen sich frei zwischen den entpackten Arrays platzieren, was mit array_merge() nicht möglich ist. Außerdem wird der Spread Operator zur Kompilierzeit aufgelöst, während array_merge() ein Funktionsaufruf zur Laufzeit ist. Bei dynamisch erzeugten Arrays oder einer variablen Anzahl von Arrays bleibt array_merge() allerdings die bessere Wahl, da der Spread Operator eine feste Anzahl von Operanden erwartet.
Fazit
Der Spread Operator (...) in PHP deckt drei zentrale Anwendungsbereiche ab: Argument Unpacking beim Funktionsaufruf seit PHP 5.6, variadische Funktionsdefinitionen und die Entpackung in Array Ausdrücken seit PHP 7.4. Mit PHP 8.1 wurde die Unterstützung für assoziative Arrays mit String Keys ergänzt, wodurch der Operator auch für Konfigurationsszenarien einsetzbar ist. Im Vergleich zu array_merge() bietet der Spread Operator eine kompaktere Schreibweise und erlaubt das Einfügen einzelner Werte zwischen entpackten Arrays. Der Operator erstellt dabei immer eine flache Kopie und kann ausschließlich Arrays sowie Traversable Objekte verarbeiten.