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

Loi*_*c H 1 php

我开始使用理论ORM映射系统。

setter函数中的void和self有什么区别?

空洞

/**
* @param string|null $firstname
*/
public function setFirstname(?string $firstname): void
{
    $this->firstname = $firstname;
}
Run Code Online (Sandbox Code Playgroud)

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

Mag*_*son 6

虚空

void表示该方法不返回任何内容。(在PHP 7.1中添加)。从文档中:

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

self表示该方法返回类实例(用于方法链接等)。这意味着您可以使用如下所示的类:

$class->setFirstname('Foo')->setLastname('Bar');
Run Code Online (Sandbox Code Playgroud)

如果您查看两种方法,则会看到的方法void不包含任何return语句,而第二种方法则包含return $this

注意:就像@ simon.ro在原始问题下的评论中提到的那样:

只是要明确指出:问题和答案都不以任何方式局限于教义实体。self和void返回类型提示是php的语言功能。