2017-07-18 2 views
1

Ich fand unten Schnipsel sehr verwirrend. Das Snippet 1 ist gerade und jeder weiß es. Was machen die anderen zwei Schnipsel? Was sind ihre Bedeutungen und welche aus welchen Gründen?Was ist der Unterschied in den folgenden drei Schnipsel

# Snippet 1 
public function __construct (array $items) { 
    $this->items = $items; 
} 

# Snippet 2 
public function __construct (array $items) { 
    $this->items = function() use ($items) { 
     return $items; 
    }; 
} 

# Snippet 3 
public function __construct (array $items) { 
    $this->items = (function (...$items) { 
     return $items; 
    })(...$items); 
} 

Der dritte Schnipsel ist von SOLIDay 2015 - Marco Pivetta - Extremely defensive PHP #7

Antwort

1

Die Snippets 1 und 3 bieten Ihnen ein ähnliches Ergebnis, außer dass das Array $this->items im dritten Snippet keine der ursprünglichen Schlüssel enthält.

Snippet 2 ist das interessantere, weil es eine anonyme Funktion anstelle eines Werts enthält. Sie können dies verwenden, wenn Sie eine kostspielige Manipulation der Eingabe verschieben möchten, die nicht für alle Ausführungspfade verwendet wird. Sie behalten auch die ursprüngliche Eingabe für jeden dieser Aufrufe bei, was nützlich wäre, wenn Sie verschiedene Transformationen an der Eingabe durchführen müssen, aber jede der Transformationen einen Zugriff auf die 'unberührte' Eingabe benötigt.

Verwandte Themen