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

为了实现对某些魔术_get()函数的检查,我正在尝试实现“类反射扩展”。该手册提到了如何编写扩展文件本身,以及如何通过service向 neon 文件添加一部分来安装它们。

我写了一个扩展,并像这样添加它:

services:
    -        class: TestClass
        tags:
            - phpstan.broker.methodsClassReflectionExtension

这会导致以下错误:

服务“0226”:未找到类 TestClass。

我尝试过的事情:

  • 使用独立的 phar

  • 使用 phpstan 的 Composer 安装

  • 使用特定的命名空间 (PHPStan) 作为扩展(在文件和 neon 中)

  • 使用“随机”命名空间(在文件和霓虹灯中)

  • 将文件添加到我知道正在扫描以进行分析的目录

  • 将带有扩展名的目录添加到“scanDirectories”参数中

  • 将文件添加到“scanFiles”参数

  • 将扩展名添加到“paths”参数中的目录

  • 添加(已弃用的)自动加载指令并在其中添加文件。

如果找不到文件,这些“添加”尝试中的一些实际上会发出警告:例如,如果我故意在其中之一中犯了一个拼写错误,比如说自动加载错误,它会警告我丢失文件。但前提是我没有定义service

如果我定义了服务并在那里故意输入错误,它会返回上面的类未找到(而不是输入错误),所以我觉得它在任何参数之前检查扩展?

似乎需要将我的文件添加到不同的自动加载机制中。问题是,哪个以及如何?

我在用着

  • phpstan 0.12.40

  • php 7.2.33


aluckdog
浏览 103回答 1
1回答

郎朗坤

扩展类需要在运行时加载。您可以通过两种方式实现这一目标:使该类可用于 Composer 自动加载器。通常配置autoload-devcomposer.json 的部分就足够了。创建一个名为类似名称的文件phpstan-autoload.php,其中包含require_once具有扩展类的文件。并在运行 PHPStan 时将文件路径 phpstan-autoload.php作为--autoload-file|-a命令行上的选项传递。
打开App,查看更多内容
随时随地看视频慕课网APP