2017-04-10 73 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