PhpStorm属性
在PhpStorm中使用这些PHP 8属性可以获得更高级的代码补全和分析。
了解更多信息,请查看博客文章。
安装
这些属性在PhpStorm 2020.3及以后版本中可用。它们已经与PhpStorm捆绑在一起,所以你不需要单独安装。
如果你正在使用其他静态分析工具,并且不想遇到"找不到类"的问题,那么你可能需要将属性包作为开发依赖添加到你的composer.json中:
composer require --dev jetbrains/phpstorm-attributes
#[Deprecated]
当你想通知用户某个实体将在未来被移除时,使用此属性。
在reason
中提供解释提示,在replacement
中提供更新建议。
#[Deprecated(
reason: '自Symfony 5.2起,请使用setPublic()代替',
replacement: '%class%->setPublic(!%parameter0%)'
)]
#[ArrayShape]
当你处理类对象数组并想为值指定键名和类型以获得更好的编码辅助时,使用Array Shape。
#[ArrayShape([
// 'key' => 'type',
'key1' => 'int',
'key2' => 'string',
'key3' => 'Foo',
'key3' => App\PHP8\Foo::class,
])]
function functionName(...): array
如果在一行中指定,该属性可与PHP ≤ 7.4一起使用。
#[ObjectShape]
该属性指定可能的对象字段名称及其类型。如果应用,IDE将建议指定的字段名称并推断指定的类型。
#[ObjectShape(["age" => "int", "name" => "string"])]
function functionName(): object {...}
$obj = functionName();
这种用法实际上意味着$obj
有2个字段,名称为age
和name
,相应的类型为int
和string
。
#[Immutable]
如果你想保证属性或整个对象在初始化后不会被改变,请使用此属性标记它们。
#[Immutable]
class DTO
{
public string $val;
public function __construct(string $val)
{
$this->val = $val;
}
}
如果在一行中指定,该属性可与PHP ≤ 7.4一起使用。
#[Pure]
对不产生任何副作用的函数使用此属性。所有这样的PHP内部函数在PhpStorm中已经被标记。
#[Pure]
function compare(Foo $a, Foo $b): int
{
return $a->a <=> $b->b;
}
#[ExpectedValues]
使用此属性来指定函数确切接受哪些值作为参数以及它可以返回哪些值。这将改善编码辅助。
function response(
#[ExpectedValues(valuesFromClass: Response::class)] $httpStatusCode,
//...
) {
//...
}
#[NoReturn]
用此属性标记终止脚本执行的函数作为退出点,以获得更准确的控制流分析。
#[NoReturn]
function redirect(): void {
//...
exit();
}
#[Language]
添加此属性以标记包含其他[编程]语言文本的字符串参数,例如RegExp、SQL等。这将改善高亮显示并为你揭示PhpStorm的其他功能。
错误和功能请求
请在PhpStorm问题跟踪器 https://youtrack.jetbrains.com/newIssue?project=WI 上报告任何问题。
欢迎提交拉取请求。