如何记录 IDE 的魔术(_call 和 _callStatic)方法

2024-04-24

在使用 notepad++ 和 sublime 编码多年之后,有人建议我尝试一下 PHP IDE。我正在尝试 phpStorm,它看起来不错。代码完成和文档是一个很棒的功能,但在使用魔术方法时对我来说不起作用。有没有办法让 phpStorm 了解魔术方法中发生的情况?

我们的情况是这样的:

abstract class a {
    public static function __callStatic($method,$args)
    {
        if(strpos($method,"get_by_") === 0)
        {
            //do stuff
        } elseif(strpos($method,"get_first_by_") === 0) {
            //do stuff
        } elseif($method == "get_all") {
            //do stuff
        }
    }
}

class b extends a {
    // some more stuff
}

b::get_by_user_id(27);
b::get_first_by_id(156);
b::get_all();

神奇的 callStatic 方法允许我们通过构成函数调用的 1 个或多个参数来获取对象集合。

我看到在这些情况下有一个 @method 语句可供使用,但 phpStorm 仅选取其中的第一个语句。此外,我只能将返回类型设置为混合类型,因为我希望能够将其设置为调用它的任何类(在我的示例中为 b)。

任何想法或建议将非常感激,谢谢。


使用类级 PHPDoc 注释——特别是@method标签——在 PhpStorm 中工作正常:

/**
 * @method static someClass get_by_user_id(int $id) Bla-bla
 * @method static someClass get_first_by_id(int $id) 
 */
abstract class a {
...

上文中:

  • @method-- PHPDoc 标签
  • static-- 告诉这是静态方法
  • someClass or $this-- 返回类型
  • get_by_user_id-- 方法名称
  • (int $id)-- 方法签名:([[type] [parameter]<, ...>])
  • Bla-bla-- 一些可选的描述

更多关于@method:

  • https://docs.phpdoc.org/latest/references/phpdoc/tags/method.html https://docs.phpdoc.org/latest/references/phpdoc/tags/method.html
  • https://github.com/phpDocumentor/phpDocumentor2/blob/develop/docs/PSR.md#711-method https://github.com/phpDocumentor/phpDocumentor2/blob/develop/docs/PSR.md#711-method

P.S. While @method static在 PhpStorm 中工作正常(告诉 IDE 该方法是静态的),但实际的 phpDocumentor 工具可能(还?)不支持它(抱歉,有一段时间没有使用它了)。


或者:(当然是在 PhpStorm 中)Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class-- 它不会以任何方式帮助完成此类方法的代码,但不会将这些魔术方法标记为“未定义方法”错误。


phpDocumentor 的门票关于使用正则表达式/部分名称@property/@method标签(它对文档有何帮助,以及在处理代码补全时它对实际 IDE 的帮助有多大):

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

如何记录 IDE 的魔术(_call 和 _callStatic)方法 的相关文章

  • 如何使用php api检查电子邮件或手机paypal帐户状态?

    如何使用 php api 检查电子邮件或手机 Paypal 帐户状态 好的 如果我想汇款到此电子邮件贝宝 email protected cdn cgi l email protection 或手机 1234567890 汇款前 我可以检查
  • PHP根据给定索引的匹配值合并数组[重复]

    这个问题在这里已经有答案了 我有两个这样的数组 Array1 Array 0 gt Array ID gt 101 Code gt 1075 Date gt 2012 03 03 17 13 12 433 1 gt Array ID gt
  • 使用 PHP 比较两个字符串的相似度

    嘿伙计们 我想寻求一些解决方案 现在我有字典了单词 txt 这里有一些例子 happy laugh sad 我有俚语字符串 hppy 我想要搜索和匹配那个俚语字符串我的字典这意味着它将返回 happy 因为这些字符串参考 快乐 in 字典
  • PHP使用正则表达式查找字符串

    我已经阅读了多个有关正则表达式的教程 但它只是不会留在我的脑海中 我永远无法让我的模式发挥作用 希望有人能帮忙 我有一个 php 变量 content 我需要在其中找到如下所示的特定模式 图库 名称 文件夹 我想搜索 starting wi
  • 在订单项目视图中显示自定义产品数据

    我在添加到购物车时遇到问题 我有一个具有不同定制条件的产品可供选择 当客户选择特定选项时 它添加到购物车 当客户选择另一种选择并添加时 它显示为购物车中的第二件商品 这没关系 但付款后 订单在第 1 项和第 2 项下均显示自定义选项 但没有
  • PHP 强制 Apache 错误

    感谢这个论坛 我了解到 PHP header 函数实际上并不将 header 发送到 Apache 服务器 而只发送到客户端 我想要做的是生成错误 500 并让 Apache 显示其相应的页面 有办法强制吗 提前致谢 还有 Allez le
  • Laravel 所有会话 ID 与 Redis 驱动程序

    在我的应用程序中 我希望允许某些用户能够注销除他 她之外的所有其他用户 当会话驱动程序设置为文件时 我已经完成了此功能 但现在我使用 redis 作为会话驱动程序 并且我无法找到任何方法来列出所有当前会话 就像我在文件时所做的那样司机 问题
  • 如何记录 Doxygen 中不存在的变量?

    例如 我在配置文件中定义了 theme 全局变量 Doxygen 不处理该变量 但我想记录下来 我尝试这样做 var theme brief Active theme 但没有成功 您可以创建一个 doxygen 特定文件来记录变量 例如 配
  • Laravel 5.4 密码重置

    我有一个 Laravel 5 4 应用程序 我的管理区域中有一个视图 允许我查看所有用户 我想创建一个功能 允许我单击后端的按钮 自动发送默认 Laravel 密码重置功能的过程 在我看来 我有以下几点 table class table
  • 如何诊断这些 PHP 代码覆盖分段和 zend_mm_heap 损坏错误

    我一直很高兴在我的 Ubuntu 机器上编码 这是一台拥有大量内存的强大机器 我正在研究 4 个新课程 一边编写和运行单元测试 在某些时候 我注意到 虽然单元测试完成得很好 但代码覆盖率却没有 在消息 正在生成代码覆盖率报告 等 之后 我会
  • Javascript 闭包与 PHP 闭包,有什么区别?

    JS 中的闭包和 PHP 中的闭包有什么区别 它们的工作方式几乎相同吗 在 PHP 中编写闭包时有什么需要注意的注意事项吗 一个区别是两者如何处理存储执行匿名函数的上下文 JavaScript var a 1 var f function
  • PHP 在 IIS7 上未报告任何错误

    我正在使用我们的 XAMPP 设置作为测试服务器来开发 PHP 应用程序 一旦应用程序准备好部署 我必须将其上传到客户端的服务器 问题是客户端的服务器正在运行 IIS 7 每次出现 PHP 错误时 它只会显示一个空白页面 现在 我的应用程序
  • 如何向 opencart 管理添加新模块?

    我想在 opencart 管理中将子菜单项 位置 添加到 目录 菜单项 在选择位置时 我想看到我自己的位置管理视图页面 该页面与 opencart 数据库中我自己的位置表相互关联 请让我知道在哪里以及创建什么 mvc 才能在开放购物车中实现
  • 将文本中的所有 URL 替换为 PHP 中的可点击链接[重复]

    这个问题在这里已经有答案了 我有一个用 PHP 编写的 Web 应用程序 我想找到用户评论中的所有 URL 并将它们更改为可点击的链接 我搜索了很多网站和页面 找到了以下解决方案 不幸的是我没有再次找到它的参考链接 感谢其作者 该代码可以完
  • 如何通过htaccess在codeigniter中隐藏index.php和控制器名称

    我想从我的 codeignier url 网站隐藏 index php 和控制器名称 我也想替换这个术语 seo test product ad test product 我在下面提到了我的 htaccess 文件 请指导我如何解决这个问题
  • 如果在 Woocommerce 中应用了任何优惠券代码,请删除一些支付网关

    我开始从事小型 Woocommerce 项目 我有 3 个支付网关进入这家商店 Paypal 信用卡和直接银行转账 我想要的是 如果使用优惠券代码 我想从可用的支付网关中禁用 或删除 Paypal 和信用卡 并仅保留 直接银行转账 作为可用
  • PHP写入文件时,如何使用现有文本在文件前面添加和追加文本?

    我正在使用 PHP 创建一个 xml 文件 这里有一些示例代码 myFile example file xml fh fopen myFile w while row mysql fetch array result stringData
  • 如何捕获生成器抛出的异常并恢复迭代?

    我有一个生成器 它将值的集合传递给方法并生成结果 调用的方法可能会返回异常 发生这种情况时 我希望异常转到调用生成器来处理异常的代码 然后继续循环生成器 为了说明这一点 下面是一个生成器的示例 它将产生1 抛出一个 Exception 然后
  • 自定义 php 论坛 - 显示新的/未读的帖子

    我自己使用 php 编写了一个自定义论坛脚本 我决定不使用 phpbb 和其他工具 因为我希望我所做的事情具有 100 的灵活性 不过我遇到了一个问题 如何向用户显示帖子是否是新的 未读的 我想到了两种解决方案 1 饼干 2 数据库 我不想
  • 通过API更新Twitter背景

    我在通过 Twitter 的 API 更新背景时遇到了一些问题 target url http www google com logos 11th birthday gif ch curl init curl setopt ch CURLO

随机推荐

  • 是否可以在更大的表达式中使用可选的 ifPresent() 来减轻对 get() 的调用?

    为了避免打电话get 这可能会引发异常 if a isPresent list add a get 我可以将此表达式替换为 a ifPresent list add 但是如果我需要执行更大的表达式 例如 if a isPresent b c
  • Biopython 成对比对导致循环运行时分段错误

    我正在尝试运行成对全局对齐方法biopython循环大约 10000 对字符串 每个字符串平均长度为 20 个字符 对一对序列运行该方法效果很好 但在循环中运行此操作 低至 4 对 会导致分段错误 如何解决这个问题 from Bio imp
  • 具有持久性的网页导航 - ASP.NET C#

    我有一个已经用 ASP NET 完成的网站 我需要在底部添加一个部分来保存实时流视频聊天 Flash 对象 并且我需要它在不同的页面访问中持续存在 例如我有可能被访问的 profile aspx 和 local aspx 并且我需要底部的小
  • li 元素内的作用域函数未被调用

    我使用 ng repeat 生成 li 在 LI 内部我有输入类型控件 它有一个范围函数 fn btnClose 当我单击按钮时 按钮的单击事件没有被调用 而是 li 的单击事件被触发 我在 js fiddle 中做同样的事情 它在那里工作
  • JSP 包含参数用法

    我应该如何访问param1来自包含的 jsp 的值 navMenu jsp
  • GPars:返回eachParallel{}

    我想对每个示例字符串做很多事情 并在此处返回一些其他类型的对象 整数 然后返回一些更大的类对象 在这个例子中 我正在尝试一些简单的事情 但我得到了完全错误的结果 至少对于我希望得到的东西 xD 我希望得到 6 5 6 5 但我得到的是 bu
  • iPhone/iPad 的核心文本示例

    我正在寻找 iphone ipad 的核心文本示例 但运气不佳 任何线索将不胜感激 我在 Github 上编写了一个小项目 为 Core Text 提供了 Objective C 包装器 https github com akosma Co
  • 如何使用 WHERE 条件中的关联值从 ABAP SQL 消费 CDS?

    我有一个通知标头的 CDS 视图及其状态关联 define view ZNOTIF as select from qmel as notif association 0 to ZNOTIF STATUS as status on statu
  • jquery如何选择所有以“text-”开头的类元素?

    我有一些课程 text 1 text 2 text 3 我想全部选择 该怎么做 谢谢您的帮助 尝试这个 欲了解更多详情 请参阅jquery selectors http api jquery com attribute starts wit
  • 如何在反向代理后面正确设置 JSESSIONID cookie 路径

    我的网络应用程序正在 Tomcat 中运行http localhost 8080 example com 但它是从 Apache 提供的反向代理http example com 在端口 80 上 我的网络应用程序查看request getH
  • RGB 缓冲区到 JPEG 缓冲区,这里出了什么问题?

    我需要一种简单的方法将包含 RGB 数据的缓冲区转换为 jpeg 我已经尝试过使用 libjpeg 但我根本无法让它正常工作 例如 将缓冲区保存为位图时会产生以下结果 使用 libjpeg 在内存中对同一图像进行编码会产生以下结果 将图像直
  • Linux 消息队列 - 多个接收者

    我最近一直在研究和研究 Linux 消息队列 并遇到了一些我不太明白为什么会发生的事情 如果我们运行两个程序 它们都在无限 for 循环中使用 msgrcv 来检查消息 然后发送两条消息 那么第一个运行的程序将收到第一条消息 第二个程序将收
  • Javascript画布不重画?

    我正在开发一个游戏 基于画布 并且遇到了问题 显然 当我按下一个键时 画布并没有更新对象的 x 和 y 它什么也没做 变量本身正在更新 但屏幕上的对象没有更新 这是代码 var canvas document createElement c
  • fiddler2无法生成证书

    我正在使用 Fiddler2 或尝试 捕获访问 https Web 服务的 Windows 桌面小工具的 SSL 流量 它曾经可以工作 然后几天前就停止了 总是出现以下错误 Unable to Generate Certificate Cr
  • 从目录节点 Js 检索文件

    我正在使用 readDirSync 从目录中获取文件 请查找代码和错误如下 var fs require fs var files fs readdirSync application models for var i in files v
  • 将多页 PDF 转换为单个图像

    我必须将多页 PDF 文档转换为 png 图像 我尝试使用 ImageMagick 但无法获得最终结果 convert document pdf document png or convert adjoin document pdf doc
  • 将带有子存储库的 Mercurial 存储库迁移到 git 并保留历史记录的最佳方法?

    我正在尝试将 Mercurial 存储库迁移到 git 但问题是 Mercurial 存储库有子存储库 有些带有分支 以及大量合并和分支本身 我希望最终的 git 存储库能够保留所有这些历史记录 并且在检查存储库或其他分支的早期部分时保持正
  • Leaflet.label 未显示在标记上

    我有一组 geoJSON 点 它们附加了相应的标签 var points L geoJson null onEachFeature function feature layer layer options riseOnHover true
  • Windows 7 在“程序文件”中创建文件夹在 C# 代码中失败,即使我有管理员权限!

    我无法使用 VS 2008 WPF C 代码在 Windows 7 64 位计算机上的 程序文件 文件夹下创建文件 我在以下代码中遇到的错误 myFile File Create logFile 如下 这是innerException堆栈跟
  • 如何记录 IDE 的魔术(_call 和 _callStatic)方法

    在使用 notepad 和 sublime 编码多年之后 有人建议我尝试一下 PHP IDE 我正在尝试 phpStorm 它看起来不错 代码完成和文档是一个很棒的功能 但在使用魔术方法时对我来说不起作用 有没有办法让 phpStorm 了