问题标签 [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 投票
0 回答
46 浏览

java - 等效于 PHP (PHPStan)中的 Java ` `/` `

<? super X>当我们用 Java 写/时,我们应该用 PHP 写什么(由 PHPStan 检查)<? extends X>

例子:

似乎我们可以<? extends X>通过引入另一个来获得类似的东西@template。我们也可以使用 thatarray<Apple>被视为 an array<Fruit>(但Transformer<Animal, Apple>不被视为 an Transformer<Animal, Fruit>,类似于 Java)。

我真的不知道如何获得<? super X>行为。我们尝试将这种方法与其他方法一起使用,@template并发现了这一点:

我真的很想能够使用<? super X>类型(较高优先级:PHPStan 接受代码;较低优先级:实际上是类型安全的)。怎么可能做到?

PS:如果您的替换<? super X>明确地引用了已知的超类型(如Animal/ Fruit),请尝试解释在不知道此类类型的情况下如何使用该方法。据我所知,PHP 没有Object始终可以使用的“通用根/基本类型”(如 Java 的)。

0 投票
0 回答
58 浏览

php - 方法...应该返回数组但返回数组('key1'=>SomeObject|null,'key2'=>SomeObject2|null)

我是 PHPStan 的新手,遇到了一个我无法理解的问题。

所以我有一个函数,它应该返回一个看起来像这样的数组:array<a|b|c|d..., mixed>(a、b、c、d 都是类常量),但在函数中,数组看起来像这样:

我收到以下错误:

Method doSomething() should return array<a|b|c|d...,mixed> but returns array('key1'=>SomeObject|null,'key2'=>SomeObject2|null)

如何让 PHPStan “相信”这个数组“看起来像”@return doc 标记中定义的数组?

我尝试了什么?

  • /**@var array<SomeConstants::*> $array**/
  • /**@phpstan-var array<SomeConstants::*> $array**/

两者都工作正常,但根据我的代码审查员的说法,我们只是强迫 PHPStan 相信数组中不存在的键存在,所以这是一个“肮脏”的解决方案......

0 投票
0 回答
93 浏览

methods - PHP Laminas PHPStan - 调用未定义的方法 Laminas\Stdlib\RequestInterface::isPost()

我们在 laminas 项目上运行 phpstan 并遇到错误。

例如,在控制器中,我们有一些可以正常工作的标准代码。

$request = $this->getRequest();

if ($request->isPost()) { ... }

然而 phpstan 抱怨:

调用未定义的方法 Laminas\Stdlib\RequestInterface::isPost()

问题似乎是 getRequest() 实际上返回了 Laminas\Http\PhpEnvironment\Request 的一个实例,它确实从 Laminas\Http\Request 继承了 isPost 函数。但是RequestInterface中没有定义这个函数。

一种解决方案是在 RequestInterface 中定义 isPost,尽管我更愿意避免更改供应商代码。

有没有更好的方法来解决这个问题?

0 投票
3 回答
1294 浏览

php - PHPStan 和 Doctrine:$id 永远不会被写入,只会被读取

我在 phpstan 中使用 PHP8、symfony5 和教义 2 并收到以下错误:

编码:

代码是正确的,PHPStan 也承认,如下所述:https ://phpstan.org/blog/detecting-unused-private-properties-methods-constants#what-if-my-code-is-%E2%80 %9C特殊%E2%80%9D%3F

那么我该如何解决 PHPStan 中的这些错误消息呢?

我尝试安装https://github.com/phpstan/phpstan-doctrine并在我的 phpstan.neon 文件中启用它:

但错误仍然存​​在。

0 投票
0 回答
136 浏览

php - 函数explode的参数#2 $string需要字符串,SimpleXMLElement|null给定

我尝试了很多解决方案,但似乎仍然无法找到解决我的问题的方法。我不断收到以下错误:

我以前从未遇到过这个问题,它只是在将 Statamic 更新到最新版本后才开始出现。这是我在 GenerateFavicons.php 中的代码:

以下代码行显示错误:

从我看到的情况来看,很多人一直在说你不应该爆炸数组。我不太确定从这里去哪里。

提前致谢。

0 投票
3 回答
191 浏览

php - 尝试将 Carbon 转换为 DateTime 时为什么会出错?

我正在开发一个 Laravel 项目。我尝试使用 Carbon 创建一个 DateTime 对象。这是我尝试过的:

但我的 phpstan 抱怨:Cannot call method toDateTime() on Carbon\Carbon|false.

为什么会出现这个错误?转换CarbonDateTime对象的正确方法是什么?

0 投票
0 回答
220 浏览

php - 如何让 PHPStan 忽略特定的代码片段(不是某些错误)?

我的代码中有很多while (1)等等if (1)。PHPStan 认为这些是错误,说诸如While loop condition is always true.or之类的东西If condition is always true.

我不想关闭这些错误,因为可能有它们的有效实例。例如,while ($some_var)如果我的代码中有错误,那总是正确的,这是我绝对想要捕捉的。我只是希望它忽略那些特定的代码字符串,当我确定这不是错误而是故意的时。

这是怎么做到的?我已经阅读了很多手册,但没有找到方法。

0 投票
1 回答
63 浏览

php - PHPStan 的“phpVersion”配置选项的格式是什么?

我一直在寻找、阅读、狩猎和拉扯我的头发。这是唯一提及phpVersionhttps ://phpstan.org/config-reference#phpversion

什么……?“70400”?为什么会出现这种奇怪的格式?这是否意味着 PHP 8.1 应该写为“80100”?这真的让我很困惑。我以前从未见过这种格式,也没有用一个词提到它。

另外,我必须将其放入 .neon 配置中吗?我不能在命令行上指定它?这确实使事情变得不必要地复杂化了。

0 投票
3 回答
92 浏览

php - 如何在php中输入函数的参数

我在获取此函数的返回类型时遇到问题,因为我在开关中有混合类型。我用过混合的,它爆炸了。我使用了string|bool和几种类型的联合类型。

我已经尝试了所有方法,但没有通过 CI/CD 管道 (AWS)

错误 以下是错误

0 投票
0 回答
25 浏览

php - PHPStan 不喜欢简写的逻辑吗?

为什么phpstan不喜欢foo的定义。这不是一个错误的代码,不是吗?如果速记很难阅读并且非常容易出错,则
虽然是合乎逻辑的。

测试:https:
//3v4l.org/iuIrm PHPStan:https ://phpstan.org/r/366b787e-53e9-4601-9770-c65c9382212e