4

为了实现对某些魔术_get()功能的检查,我正在尝试实现“类反射扩展”。手册中提到了如何自己编写扩展文件,并通过service在 neon 文件中添加一部分来安装它们。

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

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

这会导致以下错误:

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

我尝试过的事情:

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

如果找不到文件,其中一些“添加”尝试实际上会发出警告:例如,如果我在其中一个中故意输入错字,比如说自动加载一个,它会警告我缺少文件。但前提是我没有service定义。

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

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

我正在使用

  • phpstan 0.12.40
  • php 7.2.33
4

1 回答 1

4

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

  1. 使该类可用于 Composer 自动加载器。通常配置autoload-devcomposer.json 的部分就足够了。

  2. 创建一个名为类似文件的文件,phpstan-autoload.php其中require_once包含扩展类的文件。并在运行 PHPStan 时将phpstan-autoload.php文件路径作为选项传递给 命令行。--autoload-file|-a

于 2020-08-28T16:03:33.237 回答