Was bedeutet Three Dot (...) in PHP?
Während ich Magento 2 in meinem Server installiere, ist ein Fehler aufgetreten. Untersuchen Sie den Code und stellen Sie fest, dass ein Dreipunkt (...) vorhanden ist, der den Fehler erzeugt. Ich habe den folgenden Code erwähnt
return new $type(...array_values($args));
Antworten:
Der
...$str
wird in PHP als Splat-Operator bezeichnet .Mit dieser Funktion können Sie eine variable Anzahl von Argumenten für eine Funktion erfassen, kombiniert mit "normalen" Argumenten, die übergeben werden, wenn Sie möchten. Am einfachsten ist es anhand eines Beispiels zu sehen:
Die Parameterliste in der Funktionsdeklaration enthält den
...
Operator und bedeutet im Grunde "... und alles andere sollte in $ Strings gehen". Sie können dieser Funktion zwei oder mehr Argumente übergeben. Das zweite und die folgenden Argumente werden dem Array $ strings hinzugefügt und können verwendet werden.Hoffe das hilft!
quelle
[
und]
. Es ist kein großer Vorteil, aber ich denke, es sieht gut aus.function myFunc($foo, string ...$bar)
. Dann$bar
gibt Ihre Funktion eine Reihe von Zeichenfolgen und nichts anderes, was zur Laufzeit garantiert ist. Sie können dies nicht mit einem einzelnen Array-Parameter tun.function get_data($fname,$lname,$age)
müssen sich ändern, wenn Sie möchten, dass andere Felder als diese dreifunction get_data(...$fields)
nicht geändert werden müssen. Sie müssen nur die Felder angeben, in denen Sie möchten$fields
. @heykatiebenJede Antwort bezieht sich auf denselben Blog-Beitrag. Außerdem finden Sie hier die offizielle Dokumentation zu Argumentlisten mit variabler Länge :
http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list
Es scheint, dass "splat" Operator kein offizieller Name ist, aber es ist süß!
quelle
Es gibt ZWEI Verwendungszwecke für das PHP-Token mit Auslassungspunkten (...) Verpackung ein Array und Auspacken eines Arrays. Beide Zwecke gelten für Funktionsargumente.
Pack
Wenn Sie beim Definieren einer Funktion eine dynamische Anzahl von Variablen benötigen, die für die Funktion bereitgestellt werden (dh Sie wissen nicht, wie viele Argumente für diese Funktion beim Aufrufen im Code bereitgestellt werden), verwenden Sie das Auslassungszeichen (...) to Erfassen Sie alle verbleibenden Argumente, die für diese Funktion bereitgestellt wurden, in einem Array, auf das innerhalb des Funktionsblocks zugegriffen werden kann. Die Anzahl der von Auslassungspunkten (...) erfassten dynamischen Argumente kann null oder mehr betragen.
Zum Beispiel :
Wenn das Packen bei der Funktionsinstanziierung verwendet wird, erfasst die Ellipse (...) alle verbleibenden Argumente , dh Sie können immer noch eine beliebige Anzahl von anfänglichen, festen (Positions-) Argumenten haben:
Auspacken
Wenn Sie beim Aufrufen einer Funktion die Argumente, die Sie für diese Funktion angeben, zuvor zu einem Array zusammengefasst haben, verwenden Sie alternativ das Auslassungszeichen (...) mit , um dieses Array in einzelne Argumente zu konvertieren, die für die Funktion bereitgestellt werden. Jedes Array-Element wird dem jeweiligen Element zugewiesen Funktionsargumentvariable, die in der Funktionsdefinition genannt wird.
Beispielsweise:
Das Entpacken ist besonders nützlich, wenn Sie Array-Funktionen zum Bearbeiten von Arrays oder Variablen verwenden.
Beispiel: Entpacken des Ergebnisses von array_slice :
quelle
Um diese Funktion zu verwenden, warnen Sie PHP einfach, dass das Array mithilfe von mit in entpackt werden muss
... operator
. Sehen Sie hier , um weitere Informationen, ein einfaches Beispiel könnte wie folgt aussehen:quelle
Dies bedeutet, dass ein assoziatives Array in eine Liste zerlegt wird. Sie müssen also keine N Parameter eingeben, um eine Methode aufzurufen, sondern nur eine. Wenn die Methode einen zerlegten Parameter zulässt und wenn die Parameter vom gleichen Typ sind.
Für mich ist das Wichtigste am Splat-Operator, dass es helfen kann, Array-Parameter einzugeben:
Dies spart einige Anstrengungen bei der Typsteuerung, insbesondere bei der Arbeit mit großen Sammlungen oder sehr objektorientiert.
Es ist wichtig zu beachten, dass
...$array
ein Array trotz der Art seiner Elemente zerlegt wird , sodass Sie auch den hässlichen Weg gehen können:Aber bitte nicht.
quelle
Dies ist der sogenannte "Splat" -Operator. Im Grunde bedeutet das "eine beliebige Anzahl von Argumenten"; eingeführt mit PHP 5.6
Sehen Sie hier für weitere Details.
quelle
Es scheint, dass niemand es erwähnt hat, also bleiben Sie hier [Es wird auch Google (& anderen SEs) helfen, Entwickler zu führen, die nach Ruheparametern in PHP fragen ]:
Wie hier angegeben, heißt es Rest Parameters on JS & ich bevorzuge diese aussagekräftige Benennung gegenüber dieser Splat-Sache!
In PHP ist die Funktionalität zur Verfügung gestellt von ... args heißt Variadische Funktionen , die auf PHP5.6 eingeführt wird . Dieselbe Funktionalität wurde verwendet, um mit implementiert zu werden
func_get_args()
.Um es richtig zu verwenden, sollten Sie die Syntax der Ruheparameter verwenden , wo immer dies zur Reduzierung des Boilerplate-Codes beiträgt .
quelle
Ich möchte eine Verwendung dieses Operators im Magento-Framework teilen, wo er Objekte mit dynamisch konfigurierbaren Parametern (gedachte XML-Konfigurationsdateien) instanziiert.
Wie wir
createObject
aus dem folgenden Codeausschnitt ersehen können, enthält es ein Array der Argumente, die für die Objekterstellung vorbereitet wurden. Anschließend wird der...
Operator (drei Punkte) verwendet, um die Array-Werte als echte Argumente an den Konstruktor der Klasse zu übergeben.quelle
Es ist ein Splat- oder Scatter-Operator in PHP
Referenz: Splat- oder Scatter-Operator in PHP
quelle