7
我刚加入这个方法我的课:制定者和对象
/**
* @param string|StreamableInterface $body
* @return Message
*/
public function setBody($body) {
$this->body = $body instanceof StreamableInterface ? $body : new StringStream($body, true);
return $this;
}
而现在它的语义是有点不同,这取决于你传递方法的字符串或对象上发生,我。
如果你给它一个字符串,它会构造一个新的对象,否则它只会创建一个对你提供的对象的引用,这意味着你可以在这个类的外部进一步修改该对象,但不能另一个。
这是不好的做法?我应该创建一个对象的完整克隆,如果你通过一个?我不确定预期的行为是什么。
有趣的问题!尽管如此,我怀疑你的意思是你的最后一段中的“克隆”而不是“锥形”? – helmbert
它不是一个坏习惯,实际上这是接受对象或字符串作为参数的推荐方式。作为一个方面说明,如果来自构造函数的第一个参数实际上是一个字符串,并且如果不是,则可能会引发异常,您可能需要检查'StringStream'。 (_someone可能会传递一个不同的数据类型到'setBody'和暗示'StringStream'_) –
对我来说看起来很好。功能的目的是“设置一个身体”,它在两种情况下都能做到 - 不管它是一个引用还是一个新对象(对我来说)都没有关系。 –