问题标签 [psalm-php]

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 回答
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 回答
68 浏览

php - How to lint Namespace based on folder's name?

I know PHP CS Fixer and Psalm to lint PHP. I've been using both of them. But I can't find a way to lint / validate my namespace name based on the folder.

For example, in folder Tests/Controllers/V1, I have MyControllerTest.php, and it has the following codes:

How can I lint the above code with correct namespace?

NOTE: I am using PHP 7.3.

0 投票
1 回答
997 浏览

php - PSALM:Docblock 定义的类或接口不存在

我有以下代码:

可能我错过了一些东西,但我收到以下错误@psalm-param

psalm: UndefinedDocblockClass: Docblock定义的类或接口Some\Space\Utility\T不存在

0 投票
0 回答
129 浏览

php - 使用 Psalm 在自定义函数上检查“PropertyNotSetInConstructor”

有没有办法告诉Psalm检查其他函数,而不是__construct()确保在实例化类时设置所有属性的方法?

在某些 PHP 库中,Psalm 抱怨PropertyNotSetInConstructor因为它无法推断出每个构造函数中完成的全部工作。构造函数都依赖于使用动态调用正确的函数call_user_func_array()。我并不惊讶 Psalm 看不到这一点,但我需要一种解决方法来向它展示作为构造函数进行分析的正确函数。

根本原因是我们模仿具有不同数量参数的构造函数,因此我们可以同时编写$x = new X()$x = new X($a, $b)

0 投票
2 回答
941 浏览

php - 随 request->get() 提供的诗篇可能为空值

我有以下代码:

我提供了一个默认值,但 Psalm 认为它可能为 null,因为->get()声明返回一个可为空的字符串:

我该如何解决这个问题,所以 psalm 知道它不为空?

0 投票
1 回答
535 浏览

php - 多类型模板的诗篇注释

我需要构建一个特征(或类),我可以在其上模板化多种类型;我尝试过类似以下的方法(也描述了问题;汽车上下文只是为了说明问题,我知道汽车应该是聚合的而不是组合的,但这不是要讨论的问题):

问题是,在 PhpStorm 我得到“潜在的多态调用。引擎在其层次结构中没有成员” dieselSpecificMethod()

所以我的问题是:

  • psalm 是否支持多种类型的模板,因为我正在尝试实现
  • 我是否错过了上面示例中的正确语义?我应该如何注释这个?
  • 或者它只是一个 PhpStorm 限制
0 投票
1 回答
128 浏览

php - 如何声明可遍历类型?

PHP 中有多种类型提示,现在在 PHP 8 中更多,在 Psalm 中甚至更多。但是声明类型而不是暗示预期的类型呢?

我有一个interface Collection extends Traversable,我需要声明它是一个可遍历的类型Abc。我怎样才能做到这一点,以便 PHPDoc 或 Psalm 知道当我遍历 my 的实例时Collection,每个元素都是 type Abc

换句话说,我需要在接口级别保证断言将始终通过:

0 投票
1 回答
153 浏览

php - 诗篇:如何处理专用视图文件?

我的设置包括一个lib带有类的view文件夹和一个带有 PHP 文件的文件夹,它们会产生输出。视图被导入到View与此类似的类中:

在这种情况下,我基本上对 Psalm 有两个问题:

  1. 因为View::render它报告了一个UnresolvableInclude. 我什至可以用类似的$basename东西输入

    没有效果。无法解决的包含仍然存在。

  2. extract()的内容放在$params包含视图文件的本地范围内。这让我有

    我的视图文件中的“标签”带有$params === ['foo' => 'bar']. 然而,Psalm 并没有赶上这一点,并报告了很多UndefinedGlobalVariable问题。

我的问题:如何告诉 psalm 有关视图文件和变量的信息?或者,我如何重新构建此代码以便 psalm 可以为我测试它?

0 投票
0 回答
45 浏览

php - 模板字符串作为对象或对象数组

我目前正在尝试修复我的项目功能的注释,如下所示:

https://psalm.dev/r/7b974e8822

但是,它总是拒绝像A::class . '[]'类字符串这样的东西,并且只想要一个字符串。但这样做我失去了我的类型提示。我应该怎么做?

我实际上不知道我是否遗漏了 Psalm 文档中的某些内容,或者我是否应该打开一个问题来支持它。由于 symfony 序列化程序,我必须使用它。我知道我仍然可以强制它,但我想找到让它以适当的方式工作的方法。phpdoc 中的 Psalm 支持,B[]所以我认为没有理由不支持它作为参数值。

0 投票
1 回答
152 浏览

php - Psalm 报告 InvalidArrayOffset,但该值将在范围内

在这个简单的“随机字符串”生成器上运行 Psalm 时:

我收到一个错误(如此处所示

错误:InvalidArrayOffset - 15:11 - 无法使用 int 偏移访问变量 $numbers 上的值,期望 -8|-7|-6|-5|-4|-3|-2|-1|0|1|2 |3|4|5|6|7

我不明白的是,当我从$letters.

两次我都在做完全相同的事情,但在第二次中,似乎 psalm 无法从 推断出可能的返回值random_int(),并且它们将在可接受的值范围内。然而它可以第一次。

我做错了什么,我怎样才能让 Psalm 理解代码?

我知道代码有效,但我很困惑为什么第一个$pass分配不会触发错误,但第二个会触发错误。