在setter方法中,void和self有什么区别?

3
我开始使用Doctrine ORM映射系统。
在setter函数中,void和self有什么区别? Void表示该函数不返回任何值。
/**
* @param string|null $firstname
*/
public function setFirstname(?string $firstname): void
{
    $this->firstname = $firstname;
}

自身

/**
* @param string|null $firstname
*/
public function setFirstname(?string $firstname): self
{
    $this->firstname = $firstname;
    return $this
}

2
@MagnusEriksson 这可以作为答案发布。 - Cid
3
需要翻译的内容:Just to state that explicitly: neither the question nor the answer are in any way confined to Doctrine Entities. selfand void return type hints are a language feature of php.明确声明一下:问题和答案都不仅限于Doctrine实体。selfvoid返回类型提示是PHP语言的一个特性。 - simon.ro
1个回答

8

void

void 表示该方法不返回任何内容。(自 PHP 7.1 版本开始添加)。来自文档的说明:

引入了 void 返回类型。声明了返回类型为 void 的函数必须完全省略它们的返回语句,或使用一个空的返回语句。NULL 不是 void 函数的有效返回值。

self

self 表示该方法返回类实例(用于方法链等)。这意味着您可以像这样使用类:

$class->setFirstname('Foo')->setLastname('Bar');

如果您查看这两种方法,您会发现带有 void 的方法不包含任何 return-语句,而第二个方法则有 return $this
注意:正如原问题下的评论中 @simon.ro 提到的那样:

只是明确说明一点:问题和答案都不限于 Doctrine 实体。self 和 void 返回类型提示是 php 的语言特性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接