PhpStorm - 类型提示差异

Posted

技术标签:

【中文标题】PhpStorm - 类型提示差异【英文标题】:PhpStorm - type hinting differences 【发布时间】:2021-12-26 03:25:31 【问题描述】:

有时我不得不欺骗 phpStorm 向我展示类型提示功能。

我正在使用 Laravel 8 并使用 Str::replaceFirst() 函数,该函数“搜索”为“主题”字符串,“替换”为主题。我发现如果我使用一个变量,除非我在它前面加上一个空字符串,否则类型提示不起作用。

见下图。我重复Str::replaceFirst() 函数,第一次使用由一个空字符串和一个变量组成的参数,然后第二次只使用该变量。请注意,在第二个示例中,类型提示消失了。

有没有办法解决这个问题?也就是说,我希望不必在参数前面加上空字符串来显示类型提示。

【问题讨论】:

"...类型提示不起作用,除非..."。不,它按预期工作。它旨在在使用原始值(数字或文本)时提供提示。当你使用变量时,变量名应该告诉你那是什么。如果没有 - 你有一个错误的变量名。 顺便说一句:您使用什么 PHP 版本?如果是 PHP 8 - 使用 PHP 的命名参数:php.net/manual/en/…。 RFC:wiki.php.net/rfc/named_params。另一个很好的概述链接:stitcher.io/blog/php-8-named-arguments 明白了。那么模式是什么?如果 $match 被称为 $strMatch,那就是答案。还是在使用之前必须将变量定义为字符串?想出来。我会尝试两者。感谢您的帮助。 嘿,使用 php 8。我将查看 wiki。我试过 $strmatch = "";并且“str”没有产生预期的结果,也没有重新定义变量。 ANYWAY: 这些提示称为“镶嵌提示”,您可以强制为所有参数启用它们:Settings (Preferences on macOS) | Editor | Inlay Hints | PHP -- 检查那里的选项 【参考方案1】:

之前:

之后:

官方文档:

https://www.jetbrains.com/help/webstorm/viewing-method-parameter-information.html#configure_parameter_hints_in_editor

【讨论】:

美丽。谢谢。【参考方案2】:

我发现如果我使用变量,类型提示不起作用,除非我在它前面加上一个空字符串。

这是一种默认行为(IMO 是最佳的)行为:在使用原始值(字符串或数字)时显示此类提示,并在使用变量/字段时隐藏它们。

当您使用变量/字段时,它的名称应该告诉您它是什么。如果它不这样做,那么考虑为它取一个更好(更合适)的名称。您甚至可以改进保存 RegEx 匹配项的 $matches 用法(请参阅最后的部分)。

Str::replaceFirst('one', 'two', 'three');

在这里很难看出'one''two''three' 的真正含义。但在下面的代码中,一切都很清楚:

Str::replaceFirst($text, $replace, $subject);

无论如何:在 JetBrains IDE 中,此类提示称为 “嵌入提示”,对于 PHP,您可以强制 IDE 为所有参数显示此类提示:

Settings (Preferences on macOS) Editor | Inlay Hints PHP | Show parameter hints --> Show name for all arguments

PhpStorm 文档中有关 Inlay Hints 的更多信息:https://www.jetbrains.com/help/phpstorm/viewing-reference-information.html#inlay-hints


除此之外

如果您使用的是 PHP 8——请查看 PHP 自己的命名参数

PHP 文档:https://www.php.net/manual/en/functions.arguments.php#functions.named-arguments RFC:https://wiki.php.net/rfc/named_params 一篇不错的综述文章:https://stitcher.io/blog/php-8-named-arguments

基本上,您可以在方法调用中自己编写相同的提示。好处是你甚至可以交换参数的顺序,它仍然可以工作。

Str::replaceFirst(search: 'one', replace: 'two', subject: 'three');
// or even
Str::replaceFirst(subject: 'three', search: 'one', replace: 'two');

// vs the original (PHP 7.x and below)
Str::replaceFirst('one', 'two', 'three');

对于较旧的 PHP -- 您可以使用以下 IDE 功能 来查看参数是什么:

调用View | Parameter Info(Windows 键盘映射上的Ctrl + P)查看参数的快速信息:https://www.jetbrains.com/help/phpstorm/viewing-reference-information.html#view-parameter-info

它将以粗体突出显示当前参数:

或者甚至调用View | Quick Documentation(Windows 键盘映射上的Ctrl + Q)来查看该函数的函数文档/PHPDoc 注释。


RegEx 匹配的更好的变量名称 -- 查看 RegEx Named Captures

https://www.regular-expressions.info/named.html http://www.rexegg.com/regex-capture.html#namedgroups

原始代码(使用$matches[1]参考找到的价格):

$text = 'Price: €24';
preg_match('/Price: (?:£|€)(\d+)/u', $text, $matches);
echo $matches[1];

改进的代码($matches['price'] 不仅仅告诉$matches[1]):

$text = 'Price: €24';
preg_match('/Price: (?<currency>£|€)(?<price>\d+)/u', $text, $matches);
echo $matches['price'];

您可以在这里阅读更多内容:https://php.watch/articles/php-regex-readability#named-captures

【讨论】:

以上是关于PhpStorm - 类型提示差异的主要内容,如果未能解决你的问题,请参考以下文章

PHPStorm 类型提示不同类型的数组

Netbeans 和 PHPStorm 中的变量类型提示

派生类返回值的 PhpStorm 类型提示

PhpStorm - 快速文档中的返回类型提示

PhpStorm 完成,类型提示泛型

PhpStorm - 有没有办法将 PHPDoc 转换为类型提示并返回类型声明?