phpDoc 表示法指定返回类型与参数类型相同

2024-01-02

想象一下以下假设的类结构,在所有 PHPdoc 提示都正确设置的情况下,这并不是一个非常罕见的场景:

class BaseFilter {
  /** ...base methods... */
}

class TextFilter extends BaseFilter {
  public function setMinLength($len)
  {
    /** ...irrelevant */
  }
}

class SomethingWithFilters
{
  /**
   * @param BaseFilter $filter A valid filter to be added.
   * @return BaseFilter The filter that was added for easy chaining
   */
  public function addFilter(BaseFilter $filter)
  {
    $this->filters[] = $filter;
    return $filter;
  }

  /** @var BaseFilter[] A list of filters */
  private $filters = [];
}

现在我使用这段代码如下:

$myClass = new SomethingWithFilters();
$myClass->addFilter(new TextFilter())->setMinLength(8);

在 phpStorm(可能还​​有大多数其他 IDE,因为它有意义)中,第二行会产生一个警告,指出BaseFilter不包含方法setMinLength。虽然绝对正确,但这是有意的多态行为,充分利用 PHP 的后期绑定特性 - 在像 C# 这样的语言中,您必须显式向上转换。因此,我希望 phpDoc 语法在这里支持某种动态符号,指出返回类型addFilter$filter提供的类型。

我尝试将其更改为:

@return $filter

但这只是作为参考显示BaseFilter并被如此对待,仍然发出警告。

有没有什么标准化的方法可以实现这种效果,至少让常见的IDE能够理解?


IDE 在这里可以做的最好的事情可能是,如果 addFilter() 上的 @return 实际上列出了可以返回的所有可能的 BaseFilter 子项:

@return BaseFilter|TextFilter|AnotherFilter

This might触发您的 IDE 为所有可能的返回类提供所有可能的方法。这取决于所使用的 IDE 是否知道如何识别这样一个可能的返回类型列表。显然,将这​​样的列表放入许多返回标签中,这对您来说会变得乏味。

我不知道有任何 IDE 会单独查看 BaseFilter 的返回类型,生成所有可能的父+子方法的列表,从而使整个列表可用于自动完成自动地.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

phpDoc 表示法指定返回类型与参数类型相同 的相关文章

随机推荐

  • 通过 SSL 使用我自己的 GIT 服务器设置 TeamCity

    我有自己的GIT服务器存储库 可以通过HTTPS协议连接 我正在尝试设置 TeamCity 以连接到我的 GIT 存储库 但由于 HTTPS 协议而无法连接 在 Eclipse 中 我有一个设置 sslVerify false 我可以连接到
  • 使用react和next.js时找不到fs模块的错误如何解决

    我正在使用没有路由器设置的反应应用程序 我想构建我的 sitemap xml 文件 我尝试了一些模块 如 sitemap js react router sitemap sitemap generator 但这些模块会抛出错误 因为 fs
  • 第二次初始化时 AKFFTTap 停止工作

    这是讨论的延续here https stackoverflow com questions 49705736 akffttap stops generating data after some time 我正在 Swift 中构建一个适用于
  • Java 和 JavaScript 本质同时存在

    我有一个更大的 Maven 多模块项目 其中涉及多种语言 现在安装了 Eclipse JDT 和 JSDT 代码着色工作正常 但 JavaScript 中的代码完成功能不太好 这使得工作效率变得困难 Eclipse 似乎在我的项目中找不到
  • WinRT 从视频流中提取帧

    我正在使用内置摄像头解码条形码 我使用capElement Source CapturePhotoToStreamAsync从预览中捕获照片 它可以工作 但会冻结应用程序一小会儿 这感觉非常笨拙和错误 因此 我希望在后台执行此操作 同时在处
  • DropDownList如何选择默认值

    我的页面上有很多 DropDownList class BigViewModel public List
  • Android TextInputLayout/EditText 不是全尺寸并截断文本

    我有一个包含计算器的片段 只有三个监听输入的 TextInputEditTexts 这些输入在相对布局中设置 如下所示
  • Node.js 与其他 Web 技术相比的优势 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • scikit learn 中的特殊性

    I need specificity对于我的分类 其定义为 TN TN FP 我正在编写一个自定义记分器函数 from sklearn metrics import make scorer def specificity loss func
  • libtool 与 ar 用于创建静态库(xcode 链接器)

    在 Mac 10 5 上使用 xcode 通过 libtool 创建静态库和通过命令行使用 ar 都会生成一个 libMainProject a 文件 但是 当尝试使用 libtool 生成的文件链接到 xcode 应用程序时 我最终会收到
  • 带星号的批量 FOR 循环

    我有这个单行 CMD 文件 TEST CMD for f in 1 2 3 4 5 6 7 8 DO ECHO f 如果我运行这个 TEST this is a test 它正确地在单独的行上回显每个参数 即 this is a test
  • 渲染良好的网络字体解决方案

    挑战 提供动态网页字体 可在所有主要浏览器 设备和操作系统上呈现可接受的效果 故事 所以我过去使用过 cufon 或 sifr 后来放弃了这两种方式 转而使用 font face 在生产中使用 font face一段时间后 我有了一个可怕的
  • 如何解决读取图像文件时IOError:损坏的数据流?

    我在 Ubuntu 11 04 下工作 我正在尝试在我的 Django 项目中使用 PIL 遗憾的是 PIL 无法加载我的图像 以下是 PIL 设置摘要 PIL 1 1 7 SETUP SUMMARY version 1 1 7 platf
  • 为什么Java char原语占用2字节内存?

    Java char 原始数据类型是 2 个字节 而 C 是 1 个字节 有什么原因吗 Thanks Java 最初设计时 预计任何 Unicode 字符都可以容纳 2 个字节 16 位 因此char and Character进行了相应的设
  • 带有 Tibco Native Libs 的 Java Webstart

    我正在尝试部署一个使用nativeTibrv 的实施通过TibrvJ图书馆使用Java 网络启动 我已经把所有的Windows都打包了dlls从内部c tibco tibrv bin放入 Jar 文件并将它们添加到nativelib中的元素
  • 在 XML/XSLT 中转义美元符号

    我正在处理使用 XSLT 转换 XML 来自遗留系统 的要求 我在处理带有美元符号的标签时遇到了问题 这就是它们在遗留系统中存储和生成的方式 示例 XML 文件的示例
  • 在 Jest 中使用 Next.Js 测试 Api

    我想使用 Jest 为我的 Api 文件编写测试用例 它使用 Next js 我尝试了很多方法 但无法获得任何文件覆盖率 ApiFile js const axios require axios import getConfig from
  • 使用 video.js 包装器启用 YouTube 播放

    好的 所以我正在尝试使用 video js 项目包装 换肤 YouTube 视频 以实现与我网站上其他视频类似的外观和感觉 现在根据您可以看到的文档here https github com videojs video js blob ma
  • Django 1.3 日志记录:未记录 500 个错误

    我正在努力让 django request 记录器按照广告宣传的方式工作 500 个错误似乎不会传播到附加到它的处理程序 在每个新项目的默认日志记录配置中 注释表示 此配置执行的日志记录是针对每个 HTTP 500 错误向站点管理员发送电子
  • phpDoc 表示法指定返回类型与参数类型相同

    想象一下以下假设的类结构 在所有 PHPdoc 提示都正确设置的情况下 这并不是一个非常罕见的场景 class BaseFilter base methods class TextFilter extends BaseFilter publ