使用array_map的方法能否标记为#[Pure]?如何消除PhpStorm警告?
解决PhpStorm中#[Pure]方法使用array_map触发副作用警告的问题
针对你遇到的情况,有几个可行的解决办法:
方法一:用PhpStorm专属注解忽略特定警告
直接在array_map调用前添加PhpStorm的忽略注解,明确告诉IDE这个调用不会产生副作用:
// noinspection PhpPureAttributeViolation $numericalCodeArr = array_map(fn($msg) => $this->getNumericalCodeFromMessage($msg) % 99, $msgArr);
这个注解仅作用于当前行,不会影响其他代码的检查逻辑。
方法二:封装自己的纯array_map替代函数
原生array_map未标记为#[Pure],你可以自己封装一个明确标注纯属性的版本,后续用这个函数替代原生调用:
#[Pure] private function pureArrayMap(callable $callback, array $array): array { return array_map($callback, $array); }
然后在原方法中调用这个封装后的函数:
$numericalCodeArr = $this->pureArrayMap(fn($msg) => $this->getNumericalCodeFromMessage($msg) % 99, $msgArr);
IDE会识别到这个封装函数的纯属性,不会再触发警告。
方法三:替换为foreach循环
如果不想用注解或封装,直接把array_map改成foreach循环,IDE能清晰识别循环内的操作都是纯调用:
$numericalCodeArr = []; foreach ($msgArr as $msg) { $numericalCodeArr[] = $this->getNumericalCodeFromMessage($msg) % 99; }
这种方式无需额外注解,就能让IDE认可原方法的#[Pure]属性。
内容的提问来源于stack exchange,提问作者bdbdbd
相关产品推荐
相关产品推荐

