【问题标题】:Should I use @return self, this or the current class? [closed]我应该使用@return self、this 还是当前类? [关闭]
【发布时间】:2011-10-20 04:59:44
【问题描述】:

我有一个返回当前对象的方法,我该如何记录呢?

/**
 * set something
 *
 * @return this
 */
public function setSomething(){
            // ...
    return $this;
}

或者我应该使用@return self 还是@return Current_Class_Name


为什么这个问题不是“主要基于意见”(并且应该重新打开)的原因:符合标准和 IDE 类型提示支持。

【问题讨论】:

标签: php documentation phpdoc doc


【解决方案1】:

草稿中有一个PHP Standards Recommendation (PSR) (PSR-5) that proposes @return $this 用于指示返回相同的实例。

$this,此类型适用的元素与给定上下文中的当前类完全相同。因此,这种类型是 static 的更严格版本,此外,返回的实例不仅必须属于同一类,而且必须属于同一实例。

此类型通常用作实现 Fluent Interface 设计模式的方法的返回值。

目前流行的 IDE(例如 PhpStorm 和 Netbeans)使用这种表示法。

【讨论】:

  • 您的回答具有误导性,因为听起来此 PSR 建议使用 $this。我不认为这是真的。它只是允许它,就像Current_Class_Nameself
  • 另请注意,问题是@return $this 而不是@return this
  • 我使用 PHP Storm 并且 $this 会扰乱它,而 self 和 \Class 不会
  • 请注意 PSR-5 已被废弃。
【解决方案2】:

这个问题比较老了,不过就是想分享给大家!

至少对于那些使用 NetBeans 8.1..这种表示法使得 代码自动完成功能在 IDE 中可以很好地工作

/**
 * Method that returns $this instance (using late state binding)
 * @return static
 */
 public function iWillReturnMyself ( ) {
     return $this;
 }

我说至少适用于 NetBeans8.1 用户,但也可以在旧版本和/或其他 IDE 上工作 =]

【讨论】:

  • 对于 netbeans 8.2 也适用
  • 这个(imo,最好的选择)不幸的是在 PHPStorm 中不起作用。 “在静态中找不到字段 name”。
  • @PeterM PHPStorm 在我的版本(2018.2)上支持静态此处
  • 也适用于 VS Code
【解决方案3】:
/**
 * set something
 *
 * @return self
 */
public function setSomething(){
            // ...
    return $this;
}

您可以使用“self”类型作为@param 或@return..

PHPDoc 建议使用 'self' 来引用对象中的 self..

来源:http://www.phpdoc.org/docs/latest/references/phpdoc/types.html

【讨论】:

  • 这对子类效果不佳。如果子类不覆盖它,解释器不知道必须返回具有相同子类的对象。
  • @SOFe @return static 似乎受 PHPStorm 支持。
【解决方案4】:

@return Current_Class_Name 肯定会起作用,而且是我更喜欢的。

@return self 也可能适用于某些程序。

@return this 不好,因为这不是类型名。

【讨论】:

  • "return Current_Class_Name" 目前效果最好,因为它将允许 IDE 自动完成成功。 phpDocumentor [1] 和 Eclipse PDT [2] 有功能请求来识别“return $this”。 [1] -- pear.php.net/bugs/bug.php?id=16223 [2] -- bugs.eclipse.org/bugs/show_bug.cgi?id=276082
  • PhpStorm 支持@return self
  • 如果我想返回子类而不是我编写方法的基类怎么办?
  • 我不同意这个答案,/** @return $this */ 是唯一真正流利的 phpdoc 类型。虽然@return Current_Class_Name 不流利,但您会注意到在扩展类并从子级调用函数时。
猜你喜欢
  • 2014-09-12
  • 2017-05-16
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2013-05-23
相关资源
最近更新 更多