我有一个具有
#[Pure]
属性的函数,但是在我更改函数以在其中使用 array_map
后,PHPstorm 抱怨“该方法可能会产生副作用”。我还看到 array_map
没有标记为 #[Pure]
,我认为这与您无法对回调做出假设有关。在这种情况下,我的回调应该是纯回调,因为它只调用纯方法。有没有办法让 IDE 知道这个 array_map
是纯粹的,或者有没有办法我应该注释我的回调函数?
这是代码:
/**
* @param array $msgArr
* @return int
*/
#[Pure] <== this one complains
public function getHighestNumericalCodeFromMessageArray(array $msgArr): int
{
$numericalCodeArr = array_map(fn($msg) => $this->getNumericalCodeFromMessage($msg) % 99, $msgArr);
return max($numericalCodeArr);
}
/**
* @param string $msg
* @return int
*/
#[Pure]
public function getNumericalCodeFromMessage(string $msg): int
{
$trimmedMsg = trim($msg);
if (is_numeric($trimmedMsg)) return (int)$trimmedMsg;
$code = array_search($trimmedMsg, self::AVAILABILITY_MESSAGES, false);
return $code !== false ? (int)$code : 0;
}
尝试告知 IDE array_map 中的 lambda 函数是纯函数,您也可以使用 #[Pure] 属性显式注释 lambda 函数。但不确定 PHPStorm 是否会完全支持 lambda 的此属性,但您可以尝试以下方法:
#[Pure]
public function getHighestNumericalCodeFromMessageArray(array $msgArr): int
{
$numericalCodeArr = array_map(
#[Pure] fn($msg) => $this->getNumericalCodeFromMessage($msg) % 99,
$msgArr
);
return max($numericalCodeArr);
}