制定者和对象

时间:2015-04-22 19:40:51

标签: php

我刚刚将这个方法添加到我的课程中:

/**
 * @param string|StreamableInterface $body
 * @return Message
 */
public function setBody($body) {
    $this->body = $body instanceof StreamableInterface ? $body : new StringStream($body, true);
    return $this;
}

现在我发现语义有点不同,具体取决于你是否将方法传递给字符串或对象。

如果你给它一个字符串,它将构造一个新对象,否则它只会创建一个对你提供的对象的引用,这意味着你可以在一个案例中从这个类之外进一步修改该对象,但不是其他

这是不好的做法吗?如果您传入一个对象,我应该创建该对象的完整克隆吗?我不确定预期的行为是什么。

1 个答案:

答案 0 :(得分:1)

在我看来,不应该克隆流,你应该保持你的代码的方式。我甚至会考虑你做了最好的练习。如果有人希望对象拥有自己的孤立流,那么他们应该为对象提供自己的流 - 我会将该决定留给调用者。

您的方法几乎是我见过的每个类似场景中常用的方法。