2017-04-10 77 views
0

我看到如下代碼幾次,不能認爲reasonsing是什麼:PHP - 與和克隆,而不是構造

public function withParameter($parameter) 
{ 
    $clone = clone $this; 
    $clone->parameter = $parameter; 

    return $clone; 
} 

而且類似的事情:

public static function fromString(string $parameter) 
{ 
    return new StringValueClass($parameter); 
} 

爲什麼有像這樣的靜態函數而不是使用構造函數?

+1

這將有助於看到了'withParameter更多的內容()',看看它是如何使用的。關於靜態函數,需要從類再次更多上下文,但有時真正的構造是由私人,取而代之的是類可以提供一個實例給出不同類型的輸入則params的,靜態創方法來實現的幾種不同的方法。 –

+1

第一種情況看起來像它迫使類表現得像一個值類型意味着你可以自由地調用函數獲取類的新實例,但保持原有的一個,如果你需要它。第二個依賴於上下文,但它看起來只是提供了一種更具表現力的方式來創建對象實例。 – apokryfos

回答

2

功能1:

public function withParameter($parameter) 
{ 
    $clone = clone $this; 
    $clone->parameter = $parameter; 
    return $clone; 
} 

此函數返回在其中一個參數$clone->parameter設置當前類對象$this的克隆。在這裏你可以進行對對象$clone操作作爲回報不會影響當前的類對象$this

功能2:

public static function fromString(string $parameter) 
{ 
    return new StringValueClass($parameter); 
} 

在這裏,我們通過這個靜態函數就可以返回返回一些其他類對象一個對象,但通過__construct你不能,因爲沒有任何return