Phpstan Class_parent 未找到

Phpstan Class_parent not found

我正在尝试让静态 PHP 代码分析在我的 OXID 6 eshop 上运行。

然而,当谈到这个问题时,我遇到了困难:

当我 运行 vendor/bin/phpstan analyse --configuration phpstan.neon source/modules/myvendor/mymodule 时,我总是得到 Class mynamespace\Article_parent not found.

这样的错误

这可能是因为在Oxid中,eshop classes并没有被直接覆盖,而是这样声明的

<?php
namespace mynamespace;

class Article extends Article_parent
{
...

并且在 metadata.php 中定义了被覆盖的 class:

'extend' => [
        \OxidEsales\Eshop\Application\Model\Article::class => \mynamespace\Article::class,
    ],

Phpstan 似乎无法解决这个问题,我尝试了很多不同的配置文件,比如这个

parameters:
    level: max
    inferPrivatePropertyTypeFromConstructor: true
    autoload_files:
        - vendor/oxid-esales/oxideshop-ce/source/oxfunctions.php
        - vendor/oxid-esales/oxideshop-ce/source/overridablefunctions.php

或者这个

parameters:
    level: 7
    autoload_files:
    - vendor/oxid-esales/testing-library/base.php
    - vendor/oxid-esales/oxideshop-ce/source/oxfunctions.php
    - vendor/autoload.php

但无济于事。 我怎样才能让 phpstan 工作?

请升级到最新的 PHPStan 版本 0.12.33。

在 0.12.26 版本中,this article 中描述了很多重做。主要的收获是,对于 class 显然存在而无需任何额外配置的元素,您不应该再得到“class 未找到”。

此外,autoload_files 已被弃用。请按照 Discovering Symbols 指南查看该怎么做(您很可能只需从配置中删除此部分)。

\mynamespace\Article_parent class 不存在,将在运行时创建为别名。这是因为它取决于您的配置/此别名指向的其他安装模块。

我的同事 Alfred Bez 创建了 oxid-dump-autoload 工具,它将根据您当前的配置和设置转储模块链,以便 PHPStan / Psalm 可以找到 classes:

https://github.com/alfredbez/oxid-dump-autoload

希望能帮到你