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 - 类型提示差异的主要内容,如果未能解决你的问题,请参考以下文章