You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PhpStorm的#[Pure]属性检查逻辑是什么?为何Laravel FormRequest的rules方法需添加该属性

PhpStorm 为FormRequest方法提示添加Pure属性的差异原因

两个方法判定结果的核心差异来自内部调用的函数的「纯函数属性」不同。

你给出的FormRequest类代码如下:

<?php

namespace App\Http\Requests;

class VerifyPhoneNumber extends FormRequest {
    use Support\ValidatesPhoneNumbers;

    public function authorize(): bool {
        return true;
    }

    public function rules(): array {
        return [
            "phone_number" => $this->getPhoneNumberRules(),
            "verify_code" => ["required", "numeric", "max:999999"],
        ];
    }

    public function messages(): array {
        return [
            "phone_number.regex" => $this->getPhoneNumberMessage(),
        ];
    }
}

对应Trait代码如下:

<?php

namespace App\Http\Requests\Support;

trait ValidatesPhoneNumbers {
    protected function getPhoneNumberMessage(): string {
        return __("Some localized error message");
    }

    protected function getPhoneNumberRules(): array {
        return ["regex:/^\+?1?[2-9][0-9]{5,14}$/", "max:16"];
    }
}

PhpStorm判定是否需要推荐添加JetBrains\PhpStorm\Pure属性的核心逻辑,是判断方法是否符合纯函数的两个核心要求:

  • 方法执行过程中不会产生任何副作用:不会修改类属性、全局变量、外部资源,也不会触发其他有副作用的逻辑
  • 方法的返回值仅由入参决定(无入参时则返回固定值),不依赖任何可变的外部状态

对应到你的代码中:

  1. rules()方法符合纯函数要求:
    内部调用的getPhoneNumberRules()返回的是固定数组,没有任何外部依赖,本身就是纯函数;整个rules()方法的返回值固定,没有任何副作用,因此IDE会提示添加#[Pure]属性。
  2. messages()方法不符合纯函数要求:
    内部调用的getPhoneNumberMessage()用到了Laravel的翻译函数__(),该函数的返回值依赖全局的locale语言配置,属于依赖可变外部状态的非纯函数;因此整个messages()方法的返回值会随环境变化,不符合纯函数要求,自然不会提示添加#[Pure]属性。

补充说明:你对#[Pure]属性的理解是正确的,添加该属性后,如果IDE检测到该方法的返回值没有被使用,就会标记该调用为冗余代码,提示可以安全删除。

内容的提问来源于stack exchange,提问作者miken32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:06:01