2017-07-18 50 views
1

我發現下面的片段非常混亂。片段1是直截了當的,每個人都知道。其他兩個片段有什麼作用?它們的意義是什麼?以什麼理由使用?以下三個片段有什麼區別

# 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); 
} 

第三片段是從SOLIDay 2015 - Marco Pivetta - Extremely defensive PHP #7

回答

1

片段1和3將爲您提供類似的結果,但第三個片段中的$this->items數組不包含任何原始密鑰。

片段2是更有趣的一個,因爲它將包含一個匿名函數而不是一個值。如果你想推遲一些昂貴的輸入操作,那麼你可以使用它,而不是用於所有的執行路徑。您還保留每個調用的原始輸入,如果您需要對輸入執行各種轉換,但每個轉換都需要訪問「原始」輸入,這將非常有用。