【发布时间】:2021-11-26 21:39:35
【问题描述】:
我在 Laravel 项目中有一个非常简单的 FormRequest 类。两种方法,这两种方法都返回一个由方法部分填充的简单数组,但 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 中的 cmets 说:
该属性标记对程序状态或函数执行后使用的传递参数没有影响的函数。 这意味着如果执行结果没有在之后的代码中使用,则可以安全地删除解析为此类函数的函数调用。
这并没有真正给我任何线索,为什么它以不同的方式对待这两种方法。如果我对第二句话的理解正确,那么当“纯”方法的结果未使用时,IDE 会将该方法的使用标记为未使用并建议将其删除。
确定何时需要此属性的逻辑是什么?
【问题讨论】: