我刚刚将这个方法添加到我的课程中:
/**
* @param string|StreamableInterface $body
* @return Message
*/
public function setBody($body) {
$this->body = $body instanceof StreamableInterface ? $body : new StringStream($body, true);
return $this;
}
现在我发现语义有点不同,具体取决于你是否将方法传递给字符串或对象。
如果你给它一个字符串,它将构造一个新对象,否则它只会创建一个对你提供的对象的引用,这意味着你可以在一个案例中从这个类之外进一步修改该对象,但不是其他
这是不好的做法吗?如果您传入一个对象,我应该创建该对象的完整克隆吗?我不确定预期的行为是什么。
答案 0 :(得分:1)
在我看来,不应该克隆流,你应该保持你的代码的方式。我甚至会考虑你做了最好的练习。如果有人希望对象拥有自己的孤立流,那么他们应该为对象提供自己的流 - 我会将该决定留给调用者。
您的方法几乎是我见过的每个类似场景中常用的方法。