问题标签 [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.
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 配置文件:
我错过了什么?
symfony - PHPStan 使用 composer 存在 Symfony 版本差异
所以,自从我开始在我的 PHPStan 报告、我的 Gitlab CI 以及我的本地机器上收到这个错误以来已经有一段时间了。
检查我的 Symfony 基础包composer show
告诉我我正在使用 v4.3.1
但是如果你检查匹配的 Symfony 存储库,你会发现这个方法实际上需要 3 个参数。检查我的本地系统上的文件逻辑上显示同一行。
所以,我想知道:当实际有 3 个参数时,PHPStan 怎么能只看到 2 个参数?从 v4.4 开始,该方法实际上只使用了 2 个,但在我的情况下不是。
任何不涉及更新到 4.4 的建议?
php - PHPSTAN 字符串和3600之间的二进制操作“*”导致错误
我正在尝试运行简单的函数来将经度和纬度从小数转换为 DMS。
当我在 gitLab 上上传时,phpstan 报错:
字符串和 3600 之间的二进制操作“*”会导致错误。
谁能帮我解决这个问题?
php - phpstan:如何处理派生类返回类型
phpstan
修复此示例代码生成的错误的正确方法是什么?错误信息是:
Method Foo::foo() should return Child but returns Base.
}
消除错误的一种方法是更改@return
为:
但我非常不喜欢这样,因为foo()
从不返回Base
. 该代码只适用于派生类Child
。事实上,接口和基类都在一个库中(依赖),所以我什至无法更改该代码。
a()
我可以像这样在我的Child
课堂上重新实现:
但这也很丑陋,更糟糕的是,这是一个玩具示例。在真正的课堂上,我不得不重新实现许多方法。很坏。
php - PHPSTAN:捕获异常而不抛出它
大家,我有这个简单的 try catch 片段,用 PHP 编写:
这段代码运行良好,但 PHPSTAN 认为它做得不好:
捕获的“可投掷”必须重新投掷。要么捕获更具体的异常,要么在“catch”块中添加“throw”子句以传播异常。
我理解该消息,但我想知道是否有可能在抛出异常的情况下捕获异常,并且仍然验证 phpstan 检查?
非常感谢您的阅读,如果您有线索,我接受!
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 工作?
php - 如何让 phpstan 找到我的自定义扩展类?
为了实现对某些魔术_get()
功能的检查,我正在尝试实现“类反射扩展”。手册中提到了如何自己编写扩展文件,并通过service
在 neon 文件中添加一部分来安装它们。
我写了一个扩展,并像这样添加它:
这会导致以下错误:
服务“0226”:找不到类 TestClass。
我尝试过的事情:
- 使用独立的 phar
- 使用 phpstan 的 composer install
- 使用特定命名空间 (PHPStan) 作为扩展名(在文件和霓虹灯中)
- 使用“随机”命名空间(在文件和霓虹灯中)
- 将文件添加到我知道正在扫描以进行分析的目录
- 将带有扩展名的目录添加到“scanDirectories”参数
- 将文件添加到“scanFiles”参数
- 将带有扩展名的目录添加到“paths”参数
- 添加(不推荐使用的)自动加载指令并在那里添加文件。
如果找不到文件,其中一些“添加”尝试实际上会发出警告:例如,如果我在其中一个中故意输入错字,比如说自动加载一个,它会警告我缺少文件。但前提是我没有service
定义。
如果我定义了服务并且在那里故意输入错字,它会返回未找到的类(而不是错字),所以我觉得它是在任何参数之前检查扩展名?
似乎需要将我的文件添加到不同的自动加载机制。问题是,哪个以及如何?
我正在使用
- phpstan 0.12.40
- php 7.2.33
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
有没有办法做到这一点?
cakephp - Cakephp 3.x => 4.0 迁移:PHPStan\Analyser\MutatingScope 中的致命错误
当我运行rector脚本时bin/cake upgrade rector --rules cakephp40 ../project/src
,出现以下错误:
然后脚本退出,没有进行任何更改,但它会回显Rector applied successfully
。我不知道从哪里开始调试这个。
php - 如何更正 PHPstan 错误链接到 ObjectManager
我遇到了 phpstan 给我带来的错误问题。这是关于 datafixtures.php 文件中的加载方法。这是错误:
使用以下代码:
当我试图忽略错误时,据说没有错误,并且在它带来与上述相同的错误之后。那么,如果有人知道如何纠正错误或忽略?