getPhoneNumbe-6ren">
gpt4 book ai didi

php - PhpStorm 中的 "Add #[Pure] attribute"检查是为了什么?

转载 作者:行者123 更新时间:2023-12-04 12:04:15 25 4
gpt4 key购买 nike

我有一个非常简单的 FormRequest Laravel 项目中的类。两种方法,它们都返回一个由方法部分填充的简单数组,但 IDE 对它们的处理方式不同。

<?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"];
}
}
令我困惑的是IDE检查提示我应该添加 JetBrains\PhpStorm\Pure归因于 rules()方法,但不是 messages()方法。
评论在 the class definition说:

The attribute marks the function that has no impact on the program state or passed parameters used after the function execution.This means that a function call that resolves to such a function can be safely removed if the execution result is not used in code afterwards.


这并没有真正给我任何线索,为什么它以不同的方式对待这两种方法。如果我正确理解第二句话,当“纯”方法的结果未使用时,IDE 会将方法的使用标记为未使用,并建议将其删除。
用于确定何时需要此属性的逻辑是什么?

最佳答案

如果一个函数只依赖于其他纯函数,那么它也是纯函数。自 getPhoneNumberRules()只返回一个固定数组,它是纯数组,所以 rules()也是纯的。
但是messages()电话getPhoneNumberMessage() ,它调用 __()如果位置状态改变,可以返回不同的本地化消息的函数,所以它不是纯的。

关于php - PhpStorm 中的 "Add #[Pure] attribute"检查是为了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69470268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com