【问题标题】:Phpstan Class_parent not foundPhpstan Class_parent 未找到
【发布时间】:2020-07-22 15:54:24
【问题描述】:

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

然而,当谈到这一点时,我却碰壁了:

当我运行vendor/bin/phpstan analyse --configuration phpstan.neon source/modules/myvendor/mymodule 时,我总是会收到类似Class mynamespace\Article_parent not found 的错误。

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

<?php
namespace mynamespace;

class Article extends Article_parent
{
...

metadata.php 中定义了被覆盖的类:

'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 工作?

【问题讨论】:

    标签: oxid phpstan


    【解决方案1】:

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

    在 0.12.26 版中,this article 中描述了很多内容。主要收获是,对于明显存在且无需任何额外配置的类,您不应再收到“找不到类”。

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

    【讨论】:

    【解决方案2】:

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

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

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

    希望我能帮上忙

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-18
      • 2020-08-08
      • 2023-01-09
      • 2020-09-24
      • 2017-01-03
      • 2018-05-03
      • 2021-10-10
      相关资源
      最近更新 更多