php - 我怎样才能让 phpstan 找到我的自定义扩展类?

标签 php static-analysis phpstan

实现一些魔法检查 _get()函数,我正在尝试实现“类反射扩展”。 The manual提到了如何自己编写扩展文件,并通过添加 service 来安装它们。 NEON 文件的一部分。
我写了一个扩展,并像这样添加它:

services:
    -
        class: TestClass
        tags:
            - phpstan.broker.methodsClassReflectionExtension
这会导致以下错误:

Service '0226': Class TestClass not found.


我尝试过的事情:
  • 使用独立 phar
  • 使用 phpstan 的 composer 安装
  • 使用特定的命名空间 (PHPStan) 作为扩展名(在文件和 NEON 中)
  • 使用“随机”命名空间(在文件和 NEON 中)
  • 将文件添加到我知道正在扫描以进行分析的目录
  • 将带有扩展名的目录添加到“scanDirectories”参数
  • 将文件添加到“scanFiles”参数
  • 将带有扩展名的目录添加到“路径”参数
  • 添加(不推荐使用的)自动加载指令并在那里添加文件。

  • 如果找不到文件,其中的一些“添加”尝试实际上会发出警告:例如,如果我故意在其中一个输入错误,比如说自动加载一个,它会警告我丢失的文件。但前提是我没有 service定义。
    如果我定义了服务并在那里故意输入错字,它会返回高于 class-not-found(而不是错字),所以我觉得它在检查任何参数之前的扩展名?
    似乎需要将我的文件添加到不同的自动加载机制。问题是,哪个以及如何?
    我正在使用
  • phpstan 0.12.40
  • php 7.2.33
  • 最佳答案

    扩展类需要在运行时加载。您可以通过两种方式实现这一目标:

  • 使该类可用于 Composer 自动加载器。通常配置 autoload-dev 就足够了您的 composer.json 的部分。
  • 创建一个名为 phpstan-autoload.php 的文件您在其中 require_once带有扩展类的文件。并将路径传递给 phpstan-autoload.php文件为 --autoload-file|-a 运行 PHPStan 时命令行上的选项。
  • 关于php - 我怎样才能让 phpstan 找到我的自定义扩展类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63635482/

    相关文章:

    C# 可空静态分析——能否使用具有多个返回值的条件后置条件?

    symfony - phpstan 提示 Symfony 3.4 中 Flex 项目的 Doctrine 迁移

    PHPStan 忽略错误正则表达式

    php注释的java正则表达式

    PHP & SQL 加载 URL 并插入 IMG 类

    javascript - 前端 Web API 资源使用情况

    php - 如何让 phpstan 推断我的 Laravel Collection 管道的类型?

    php - 我想在用户使用 PHP 和 ImageManipulator 库上传个人资料图像时调整其大小

    php - 在函数参数之前使用 & 的目的是什么?

    c# - 这个软件列出当前进程并使用未记录的当前功能写入内存的技巧是什么