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 表示法指定返回类型与参数类型相同 的相关文章

  • 是否可以使用流上下文在 PHP 下使用 FTPS?

    我了解到使用ftpsPHP for Windows 下的 ftp ssl connect 很困难 您被要求进入构建自己的二进制文件以包括 Open SSL 的漫长旅程 我找到了以下建议phpseclib http phpseclib sou
  • 计算特定产品类别的购物车商品数量

    我试图仅从 WooCommerce 中的特定产品类别获取购物车中的商品数量 我正在为一家酒厂做一个网站 它有酒精和非酒精产品 所有葡萄酒都属于 葡萄酒 主类别或类别 ID 34 其下有许多子类别和产品 对于属于此类别的任何商品 我需要知道此
  • Monolog,如何将 PHP 数组记录到控制台?

    我正在使用浏览器处理程序将消息记录到 JS 控制台 require once vendor autoload php use Monolog Logger use Monolog Handler BrowserConsoleHandler
  • 使用 PHP 将 SVG 图像转换为 PNG

    我正在开发一个网络项目 该项目涉及动态生成的美国地图 根据一组数据为不同的州着色 这个 SVG 文件为我提供了一张很好的美国空白地图 并且很容易更改每个州的颜色 困难在于 IE 浏览器不支持 SVG 因此为了让我使用 svg 提供的便捷语法
  • PHP 和 DOM 文档

    我有一个关于 DOMDocument 的使用和创建 XML 的问题 我有一个 PHP 程序 加载到 XML 文件中 处理XML的每个节点 行 将其发送到另一个进程 然后该进程返回一个 XML 元素 我获取节点的字符串表示形式 以便可以创建
  • php 或 zend 中国际电话号码验证的正则表达式是什么?

    我有一个 zend 表单 其中有一个电话号码字段 并且必须检查验证器 我决定为此使用正则表达式 我搜索了谷歌 但我得到的结果不起作用 谁能给我提供正则表达式 这是我的代码 phone new Zend Form Element Text p
  • 当用户再次访问同一页面时保持登录状态?

    目前我正在使用会话来登录用户 但是当我关闭浏览器并再次打开它时 我必须再次登录 你如何让用户在 2 周内保持登录状态 那么是通过cookie吗 那么您想要 在这台计算机上记住我 选项吗 这是一种与语言无关的方法 创建一个至少包含以下内容的数
  • C++ 装饰器模式,模板的静态多态性和注册回调方法

    我正在尝试使用静态多态性来创建装饰器模式 至于为什么我不使用动态多态 请看这个QA https stackoverflow com questions 39312070 c dynamic cast over decorator insta
  • 如何使用 PHP 查找目录中的前 5 个文件?

    如何使用 PHP 列出按字母顺序排序的目录中的前 5 个文件或目录 Using scandir array slice array filter scandir path to dir is file 0 5 The array filte
  • PHP:在多维数组中查找相同的键并合并结果

    我有一个多维数组 如下所示 array 0 gt array WS gt array id gt 2 name gt hello 1 gt array SS gt array id gt 1 name gt hello2 2 gt arra
  • Laravel 5.6 - 注册表无法正常工作并且不显示任何错误

    在我最近的一个项目中 定制登记表不管用 当我单击注册按钮时 它会重新加载注册表单 不会打印任何错误 并且不会将数据插入数据库中 这是注册表的外观 这里是移民文件代码 public function up Schema create user
  • MySQL:“您的 SQL 语法错误...靠近键...”? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我发现了一个非常酷的用于丢失密码的脚本 但是这一行给我带来了问题 r mysql query INSERT INTO keys u
  • 计算轮班工作时间并检测

    我有个问题 我的英语很差 我需要用PHP做一个加班计算 已经有一个代码可以实现这一点 但当工作时间超过2天时 计算就会出错 工作开始 2018 09 09 13 43 工作结束 2018 09 11 07 13 结果 07 18 04 00
  • PHP URL 验证

    我知道有无数的线程问这个问题 但我一直无法找到一个可以帮助我解决这个问题的线程 我基本上试图解析大约 10 000 000 个 URL 的列表 确保它们根据以下标准有效 然后获取根域 URL 此列表包含您能想象到的几乎所有内容 包括类似的内
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 如果文件名减去扩展名,.htaccess url 重写行为将被覆盖。与网址相同

    我正在尝试整理 URL 并从中删除 php 扩展名等 我位于网站的基本文件夹中 因此没有可以优先处理的父 htaccess 文件或其他文件 这是我的 htaccess 代码 RewriteEngine On RewriteRule give
  • 在 Windows 上查看 PHP 文件夹

    我正在编写一个简单的 PHP 脚本来监视文件夹及其子文件夹的任何更改 新文件 修改 删除 然后执行操作 我将使用 Windows 上的命令行运行此脚本php f script php 我一直在寻找一种在 Windows 上观看具有 PHP
  • 准备好的语句需要 0 个参数,给定 1 个参数..,使用 php 手册示例 [重复]

    这个问题在这里已经有答案了 我直接从 php 手册示例中获取了这个 它几乎与我需要的相同 但我仍然收到此错误 有人可以告诉我我错过了什么吗 stmt link gt prepare SELECT obitBody Photo FROM tn
  • 如何检查号码是否是巴基斯坦用户的手机号码而不是固定电话号码

    我所做的是从开头删除 92 或 0092 并使用以下代码检查它是否是巴基斯坦人的有效手机号码 if preg match 3 0 4 0 9 number 1 Pakistani mobile number else not a pakis
  • 使用 md5 加密的 PHP 和 Mysql 查询出现问题

    我使用普通的 php mysql 插入查询并使用 md5 加密密码 这是插入查询 sql mysql query INSERT INTO user username password role approved values usernam

随机推荐

  • 通过 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