Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 设置器和对象_Php - Fatal编程技术网

Php 设置器和对象

Php 设置器和对象,php,Php,我刚刚将此方法添加到我的类中: /** * @param string|StreamableInterface $body * @return Message */ public function setBody($body) { $this->body = $body instanceof StreamableInterface ? $body : new StringStream($body, true); return $this; } 现在我意识到,语义有点

我刚刚将此方法添加到我的类中:

/**
 * @param string|StreamableInterface $body
 * @return Message
 */
public function setBody($body) {
    $this->body = $body instanceof StreamableInterface ? $body : new StringStream($body, true);
    return $this;
}
现在我意识到,语义有点不同,这取决于你是给方法传递一个字符串还是一个对象

如果您给它一个字符串,它将构造一个新对象,否则它将只创建对您提供的对象的引用,这意味着您可以在一种情况下从该类之外进一步修改该对象,但在另一种情况下不能


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

在我看来,流不应该被克隆,您应该保持代码的原样。我甚至会考虑你做了什么最好的练习。如果有人想让对象有自己的独立流,那么他们应该给对象自己的流——我将把这个决定留给调用者


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

有趣的问题!不过,我怀疑你在上一段中的意思是“克隆”而不是“锥”,这根本不是一个坏习惯,实际上这是接受对象或字符串作为参数的推荐方式。作为旁注,如果构造函数中的第一个参数实际上是字符串,您可能希望签入
StringStream
,如果不是,则抛出异常。(有人可以将不同的数据类型传递给
setBody
,将隐式传递给
StringStream
)我觉得这很好。函数的目的是“设置一个主体”,它在两种情况下都会这样做——不管它是引用还是新对象(对我来说)。