问题标签 [phpstan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1797 浏览

php - 纠正 PHPStan 在 Symfony 项目的 UserInterface 上抛出的类型提示错误

我最近开始在Symfony 3.4项目上使用PHPStan(版本 0.12.19),但我遇到了一个错误,看起来应该很容易解决,但我很难弄清楚。

目前在第 7 级运行。这是我运行时遇到的错误:

vendor/bin/phpstan analyse

这是MapController.php的重要部分:

getUser 方法是 Symfony 方法,所以我无法更改这部分:https ://github.com/symfony/symfony/blob/3.4/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php#L444 :

MapMarker.php的重要部分:

当我转储它时,$user instanceof UserInterface它返回 true - 据我所知,它正在传递一个 UserInterface 对象,而不仅仅是 PHPStan 所指示的“对象”。

最后,这是我的 phpstan.neon 配置文件:

我错过了什么?

0 投票
0 回答
73 浏览

symfony - PHPStan 使用 composer 存在 Symfony 版本差异

所以,自从我开始在我的 PHPStan 报告、我的 Gitlab CI 以及我的本地机器上收到这个错误以来已经有一段时间了。

PHPStan 错误

检查我的 Symfony 基础包composer show告诉我我正在使用 v4.3.1

在此处输入图像描述

但是如果你检查匹配的 Symfony 存储库,你会发现这个方法实际上需要 3 个参数。检查我的本地系统上的文件逻辑上显示同一行。

头包::获取

所以,我想知道:当实际有 3 个参数时,PHPStan 怎么能只看到 2 个参数?从 v4.4 开始,该方法实际上只使用了 2 个,但在我的情况下不是。

任何不涉及更新到 4.4 的建议?

0 投票
1 回答
518 浏览

php - PHPSTAN 字符串和3600之间的二进制操作“*”导致错误

我正在尝试运行简单的函数来将经度和纬度从小数转换为 DMS。

当我在 gitLab 上上传时,phpstan 报错:

字符串和 3600 之间的二进制操作“*”会导致错误。

谁能帮我解决这个问题?

0 投票
1 回答
2337 浏览

php - phpstan:如何处理派生类返回类型

phpstan修复此示例代码生成的错误的正确方法是什么?错误信息是:

Method Foo::foo() should return Child but returns Base.

}

消除错误的一种方法是更改@return​​为:

但我非常不喜欢这样,因为foo() 从不返回Base. 该代码只适用于派生类Child。事实上,接口和基类都在一个库中(依赖),所以我什至无法更改该代码。

a()我可以像这样在我的Child课堂上重新实现:

但这也很丑陋,更糟糕的是,这是一个玩具示例。在真正的课堂上,我不得不重新实现许多方法。很坏。

0 投票
1 回答
156 浏览

php - PHPSTAN:捕获异常而不抛出它

大家,我有这个简单的 try catch 片段,用 PHP 编写:

这段代码运行良好,但 PHPSTAN 认为它做得不好:

捕获的“可投掷”必须重新投掷。要么捕获更具体的异常,要么在“catch”块中添加“throw”子句以传播异常。

我理解该消息,但我想知道是否有可能在抛出异常的情况下捕获异常,并且仍然验证 phpstan 检查?

非常感谢您的阅读,如果您有线索,我接受!

0 投票
2 回答
578 浏览

oxid - Phpstan Class_parent 未找到

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

然而,当涉及到这一点时,我正在碰壁:

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

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

并在metadata.php覆盖的类中定义:

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

或者这个

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

0 投票
1 回答
1057 浏览

php - 如何让 phpstan 找到我的自定义扩展类?

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

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

这会导致以下错误:

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

我尝试过的事情:

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

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

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

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

我正在使用

  • phpstan 0.12.40
  • php 7.2.33
0 投票
1 回答
348 浏览

php - 如何使用 psalm 和 phpstan 为工厂编写泛型

我正在为 php 尝试 phpstan 和 psalm,我想编写一个类,它可以采用不同类型的对象并根据要调用的工厂返回正确的对象。

我想要实现的是,如果我将 A 类型的对象传递给 Transformer,编译器就会知道将返回 SuperA。

虽然我可以在 psalm 中没有错误(尽管我仍然得到 SuperA|SuperB 而不是正确的对象),但我在 phpstan 中传递的内容出现错误。

https://phpstan.org/r/4fce6f46-7aea-4f73-8259-df895910f064

https://psalm.dev/r/352e64ea95

有没有办法做到这一点?

0 投票
0 回答
249 浏览

cakephp - Cakephp 3.x => 4.0 迁移:PHPStan\Analyser\MutatingScope 中的致命错误

当我运行rector脚本时bin/cake upgrade rector --rules cakephp40 ../project/src,出现以下错误:

然后脚本退出,没有进行任何更改,但它会回显Rector applied successfully。我不知道从哪里开始调试这个。

0 投票
0 回答
34 浏览

php - 如何更正 PHPstan 错误链接到 ObjectManager

我遇到了 phpstan 给我带来的错误问题。这是关于 datafixtures.php 文件中的加载方法。这是错误:

使用以下代码:

当我试图忽略错误时,据说没有错误,并且在它带来与上述相同的错误之后。那么,如果有人知道如何纠正错误或忽略?