如何在 PhpStorm 中高效:一个真正重要的 IDE
已发表: 2022-03-11成为一名优秀的软件开发人员意味着什么?
首先,它需要深入了解您正在从事的特定技术堆栈。如果您是 LAMP 开发人员,那么您无疑需要成为 PHP 和 MySQL 方面的专家,了解现代框架,并在 Linux 管理方面拥有一些不错的技能。
其次,同样重要的是,您需要了解您每天在工作流程中使用的补充工具。
您需要能够与版本控制系统、持续集成工具、虚拟机管理服务(如 Vagrant)以及显然您的集成开发环境 (IDE) 一起正常工作。
本文介绍了流行的、强大的 IntelliJ IDEA IDE PhpStorm,以及如何通过一点点努力轻松地提高效率,甚至在编码时防止错误。
用键盘快捷键训练自己
让我们从对任何 IDE 来说最简单、或许也是最重要的技能开始:正确使用键盘。
如果你比较一个经验丰富的程序员和一个普通的 PC 用户,你会注意到的第一件事是程序员几乎把所有的时间都花在了键盘上,几乎没有碰过鼠标。 这是有原因的:它更有效。
首先,成为一名优秀的打字员
虽然打字与 IDE 技能没有直接关系,但如果您需要盯着键盘查找每一个键,则快捷键是无用的。
如果您还没有每分钟至少输入 50 个单词 (WPM),请查找打字培训网站,例如 TypingClub.com,并提高您的速度。
还有一些有竞争力的打字网站,例如 TypingRaces.com,您可以在其中与其他人进行打字比赛。 我的推荐? 参加比赛作为每天早上的热身。
训练自己使用 PhpStorm 的快捷方式
最快的学习方法是不要给自己提供键盘快捷键的替代方案。
当我学习快捷方式时,我关闭了所有菜单、选项卡、导航栏等。你也可以通过导航到查看菜单并取消选中所有标记来做到这一点(你可能想离开“状态栏”):
我的 IDE 现在看起来像这样:
我花了大约三四天的时间来度过笔记本电脑粉碎的调整阶段。
如果您发现自己的动力不足,PhpStorm 有一个内置的生产力指南。 它包含功能列表和每个功能的使用统计信息。 只需单击“帮助”,然后单击“生产力指南”,您就会看到如下内容:
如您所见,快捷方式使我免于输入超过 20,000 个额外字符(在六个月的过程中)并防止了大约 1,000 个错误。 很励志!
它还告诉我哪些功能我不经常使用,确定我可以提高我的快捷技能的地方。 查看您的统计数据,并明智地使用这些知识。
顶级键盘快捷键
Jetbrains 提供了一个方便的 PDF,其中包含其官方文档中列出的所有可用快捷键,此外还有一个“您不能错过的键盘快捷键”列表。 立即开始学习这一点,直到你能在睡梦中做到这一点。
到目前为止,我最喜欢的快捷方式是:
-
Ctrl+ E- 在最近使用的文件之间切换 Ctrl + /- 注释/取消注释代码块Ctrl + B- 转到类声明Ctrl + N- 导航到班级Ctrl + R- 搜索和替换Ctrl +Alt + L- 重新格式化代码Alt + Enter- 显示意图操作和快速修复Ctrl + Shift + Enter- 完成语句
其中一些是不言自明的,其他的可以使用更多的覆盖范围。
使用 Ctrl + E 和 Enter 切换文件
想象一下,您需要经常在两个文件之间切换,例如,在具有应用程序业务逻辑的 PHP 类和用于呈现和输出它的模板之间切换。
许多开发人员会从键盘切换到鼠标,导航到包含文件的选项卡,单击它,然后使用滚轮找到所需的部分。 问题:它非常慢!
按Ctrl+E然后回车不是更好吗?
Ctrl+E 将显示最近使用的文件列表,如果您立即按 Enter,您将切换到当前文件之前使用的文件。
如果您想返回,只需再次按下相同的序列即可。
这是在两个文件之间切换的最快方式,只需三个按键! 想象一下,当您每天必须这样做数百次时,您将节省多少时间。
使用 Alt+Enter 显示意图操作和快速修复
任何现代 IDE 都会突出显示错误并提供一些代码改进建议。 如果您将光标移动到任何不完整或未记录的代码片段,您将看到一个灯泡图标,如果您单击它,您将看到一个包含可能操作的弹出菜单。
同样的操作可以通过按Alt+Enter来完成,这样更方便。
在上面的屏幕截图中,PhpStorm 提供了两个选项:向函数添加 PHPDoc 规范(这是一个非常好的建议,请继续关注),并删除未使用的参数。
相同的快捷方式可用于许多其他常见操作:为类属性创建 getter 和 setter、初始化构造函数中的字段、添加未定义的方法和属性等。
使用 Ctrl+Shift+Enter 完成语句
这个快捷方式非常简单,同时也非常有用,完全按照它所说的去做。
例如,如果您键入$i = 0 ,然后在其后立即按Ctrl+Shift+Enter ,PhpStorm 将在您的表达式中添加一个分号。 如果您键入if和它后面的快捷方式,PhpStorm 将添加括号,依此类推。
尽可能频繁地使用此快捷方式。 由于所有代码都由标准结构组成,它将为您节省大量时间。 编写结构的任何速度提高都会使编写代码的速度也快得多!
IdeaVim 插件
使用快捷方式可以大大提高您的工作效率,但如果这对您来说还不够,下一个级别是 IdeaVim 插件。
您可能知道,Vim 是 Linux 极客和 devops 工程师广泛使用的控制台文本编辑器,用于通过命令行管理远程服务器。
Vim 有两个重要的特性。
首先,学习难。 其次,如果你了解它,它就会得到回报。 您在文本编辑方面的工作效率将比任何GUI 编辑器都要好得多。 在你的职业生涯中也会出现一些情况,你别无选择,只能使用控制台编辑器,比如 Vim,(例如,如果你需要在远程 Web 服务器上修复某些东西,而你只能通过控制台访问它)。
但是 Vim 与 PhpStorm 有什么关系呢?
嗯,许多开发人员希望将 Vim 的效率与现代 IDE 的特性(例如代码完成、类搜索、高级搜索和导航)结合起来。 为此创建了 IdeaVim 插件。
重要提示:从这里开始,我假设您了解 Vim 的基础知识。 如果你不这样做,你可以开始使用带有 vimtutor 的 Vim,它在几乎所有 Linux 发行版或 openvim 中都可以访问。
插件安装
1.导航到“文件”,然后是“设置”,然后是“插件”,然后在插件搜索框中输入 IdeaVim。 标记插件名称右侧的复选框,然后单击“应用”。 2.重启 PhpStorm。 3.通过检查'Tools'然后'Vim Emulator'打开插件
4.原始的 PhpStorm 快捷方式和 Vim 快捷方式(由插件启用)可能会相互冲突,因此您需要手动解决这些冲突。 导航到“文件”、“设置”、“其他设置”,然后是“Vim 仿真”。 您将看到有冲突的快捷方式列表。 在此列表中,您可以选择是使用 PhpStorm 快捷键还是绑定到该键序列的 Vim 快捷键。 您可以在下面的屏幕截图中看到我当前的选择。 如果你无法做出决定,就留下一个未定义的快捷方式; PhpStorm 会在你第一次使用时要求你选择。
插件使用
打开插件后,您会立即注意到编辑区域变得类似于 Vim:
- 光标改变了它的形式,变成了矩形,就像在 Vim 中一样。
- 如果您尝试在编辑器中输入内容,则不会发生任何事情。
从这一点开始,您可以像在 Vim 中一样开始编辑文件,使用h 、 j 、 k 、 l键进行导航,使用i键在普通模式和插入模式之间切换等。
该插件支持几乎所有 Vim 快捷方式。
同时,所有 IDE 功能仍然存在,因此您可以非常快速地编辑文本,只使用键盘(如在 Vim 中),并且仍然在类、文件、用法和定义之间跳转(如在 PhpStorm 现代工作流程中)。
高级搜索
与普通文本编辑器相比,任何 IDE 的最大优势之一是能够实现高级搜索。
如果您只处理过小型项目,这似乎是多余的,但是当您开始处理大型代码库以及类之间复杂的 OOP 关系时,您就会明白它是多么不可或缺。
通过常用搜索 ( Ctrl + F ) 或搜索替换 ( Ctrl + R ) 很容易在文件中找到特定字符串,但是如果您需要在数千个文件中查找特定类的定义怎么办? 或者,如果您想在包含数千行代码的类中查找特定方法? 或者,也许您想从检索结果中排除所有评论? 这就是像 PhpStorm 这样的现代 IDE 提供帮助的地方。
在本节中,我将向您展示 PhpStorm 中最有用的搜索变体。
在路径中查找
在普通搜索之后,最简单的搜索是在项目的某个子文件夹中的所有文件中搜索特定字符串。 它在 PhpStorm 中很容易实现,以至于我使用它的频率比任何其他搜索选项都高。
例如,在我的示例应用中搜索类User的用法。
1.按Ctrl + Shift + F 。 您将看到一个带有搜索选项的弹出窗口。 在查询字符串中键入“ User ”。 您将在“预览”选项卡中看到许多结果:
2.现在,我们可以切换到预览选项卡,并在那里手动查找所需的结果,但我们有超过 100 个匹配项。 乏味! 让我们更具体一点。
首先,我们正在搜索类的用法,所以让我们检查一下“whole words only”选项。 它将帮助我们避免像E_USER_ERROR这样的结果。
接下来,让我们排除在注释和字符串文字中的搜索,并仅通过.php文件限制我们的结果。
有时指定项目的更具体的子文件夹也很有意义。 在这种情况下,所有项目特定的代码都位于app文件夹中。
因此,让我们将范围目录更改为example-app/app 。
现在,我们有一个像这样的搜索窗口:
只是通过更具体的搜索参数,我们将结果数量从数百个减少到只有 24 个!
现在,很容易手动检查它们中的每一个。 此外,我们甚至不需要单独打开每个文件,因为我们有一个非常方便的预览选项卡:
在日常实践中,路径搜索中的查找涵盖了我进行的所有搜索的大约 80%。 它非常有用,即使您不使用其他任何东西进行检索,您仍然会非常高效。
前往声明
PhpStorm(与所有现代 IDE 一样)的另一个极其重要的能力是在类和函数的用法和声明之间跳转。
假设我们有一个函数,它创建一个新的User 。 显然,我们不会记住User类的所有方法和属性,因此我们需要检查类的声明来决定如何执行所有需要的操作。 有几种方法可以做到这一点。
首先,您可以将类声明作为快速只读弹出窗口打开。
只需将光标移动到任何类用法并按Ctrl + Shift + I 。 将出现只读窗口:
您可以检查所有必要的数据,然后返回到初始文件。 它非常快; 你甚至不需要在文件之间切换!

但是,正如我所提到的,弹出窗口是只读的,因此如果您决定在检查User类时更改某些内容,您将需要另一个快捷方式: Ctrl + Shift + B
这会将您直接导航到课程。 当您进行更改时,您可以使用我们之前介绍的Ctrl + E, Enter序列轻松返回到初始文件。
列出当前类的所有方法
我每天使用的搜索功能的最后一个变体是“按类结构搜索”。 有时 PHP 类很长,很难找到特定的属性或方法。
如果在类文件打开时按Ctrl + F12 ,您将看到一个带有类结构的弹出窗口:
如果您开始输入方法名称,您将只看到与您输入的模式匹配的方法:
试想一下,您有大约 100 个方法(这不是一个好习惯,但您可能会遇到这样的代码),并且您需要经常在其中两个之间切换。 用普通的搜索就能让你发疯!
通过使用文件结构搜索,每个开关将需要大约五次击键。 只需输入Ctrl + F12 ,开始输入所需方法的名称,然后按Enter ,您就会看到它的声明。
顺便说一句, Ctrl + F12不是一个方便的快捷方式,因此您可能需要考虑将其更改为其他内容。 就个人而言,我使用Alt + R 。
PhpStorm 中的搜索方法还有很多,但这三种几乎可以涵盖所有日常搜索任务。
搜索功能回顾
- 如果您需要搜索在多个文件中找到的内容,请使用路径搜索中的查找 (
Ctrl + Shift + F),并尝试使搜索选项(过滤)尽可能具体。 - 如果您需要快速查看类或方法的来源,请使用
Ctrl + Shift + I并通过快速弹出窗口检查它(如果您需要编辑它,请通过Ctrl + Shift + B导航到声明)。 - 如果您有一个大型类并且需要检查其结构或在方法之间快速切换,请使用文件结构快捷方式,默认情况下为
Ctrl + F12。
所有基本语言结构的实时模板用法
虽然快捷方式允许您快速编写和导航代码,但还有一种方法可以进一步改进它——自动完成和实时模板。
基本的自动补全非常简单,您当然应该知道它。
如果您开始键入类、方法或变量的名称,任何好的 IDE 都会向您显示可能的结尾列表。 您可以选择其中任何一个,并避免输入到最后。
也就是说,您可以使用实时模板走得更远。
在本节中,您将了解我在日常工作中使用的实时模板。 我将它们分为三组:基本语言结构、长名称函数和 HTML 块。
基本语言结构
不用说,开发人员每天多次if标准语言结构,例如while 、 for 、 foreach ,因此每次从头开始键入它们的效率极低。 这就是为什么在 PhpStorm 中有内置的实时模板。
对于一些改变生活的直播模板魔法,打开 PhpStorm,在编辑区输入forek ,然后Enter 。 你会看到这个:
PhpStorm 用完整的foreach循环替换了一个模板,并为所有必要的变量准备了存根。 您只需要填写正确的变量名。
如果您按Ctrl + J ,您将看到当前支持的实时模板列表,适用于代码的当前位置。 您可以选择其中任何一个。
您可能已经注意到,这里缺少一些非常常见的结构。 例如,我总是想念while循环的实时模板,所以让我们创建它吧!
导航到“设置”,然后是“编辑器”,然后是“实时模板”,选择“PHP”,然后单击弹出窗口右上角的绿色“+”:
用“wh”填写“缩写”字段,用“while(bool_expr){…}”填写“描述”字段。 “模板文本”字段应具有以下内容:
while($EXPR$) { $END$ }单击“模板文本”文本区域下方的“定义”链接,然后从列表中选择“PHP”,这样它就知道在什么上下文中使用该模板。
现在,让我们讨论一下它是如何工作的。
当您在编辑区域wh, Enter时,它将被模板文本替换。
光标将移动到第一个模板变量,在我们的例子中是$EXPR$ ,然后您可以输入任何表达式(例如$i > 0 )并再次按Enter 。
之后,光标将移动到下一个变量(本例中只有一个),依此类推。 $END$是一个特殊变量,表示在填充所有变量后光标应该移动的位置。
我们只有一个变量,所以在我们填充$EXPR$后它会立即移动到$END$ ,我们将准备好输入一个循环体。
为您经常使用的所有语言结构创建自己的实时模板。 预先投入一些时间比每天花时间从头开始输入这样的结构要好得多。
PHP 函数
不幸的是,PHP 以函数名称冗长且不一致的语言着称。
好消息是您可以使用实时模板将它们替换为简短的缩写。 例如,如果要正确检查数组中是否存在某个键,则需要调用函数array_key_exists($my_key, $my_array) 。
即使使用标准的自动完成功能,每次都输入它也非常乏味,因此只需为所有此类情况创建实时模板。
就个人而言,我更喜欢 array_key_exists 的 'ake',你可以选择任何其他。 以下是创建“ake”实时模板的方法:
HTML 块
最后,但肯定不是最不流行的实时模板用法是处理 HTML 块。
如果您还没有使用实时模板,我敢打赌,您一直在做很多乏味的(而且基本上是无用的)工作,创建标准的 HTML 标记元素。 实时模板通过我们上面所做的改变了这一点,但“模板文本”字段是您的 HTML。
使用 PHPDocs 避免错误
到目前为止,您已经了解了 PhpStorm 效率提示和技巧,但等等,还有更多。 效率不是它唯一可以提供帮助的领域,它还可以帮助避免错误,甚至在您的程序第一次运行之前。
开箱即用,PhpStorm 会告诉您明显的错误。
例如,如果您忘记了语句后的分号,它会将其标记为红色,但该功能是微不足道的,所以我不会描述它。
有趣的是,当 PhpStorm 告诉您更复杂的错误时,当您通过 PHPDocs 向它提供所需的信息时。
理想情况下,PHPDoc 规范对您的团队来说是所有方法的强制性要求,并且尽可能严格。 再次考虑我们的User类的示例。 假设我们有一个函数,它返回一个User对象数组:
默认情况下它没有被记录,因此其他开发人员可能不知道返回值的类型并且可能不正确地使用它。
例如,其他一些开发人员想要检索用户名列表。 出于某种原因,她认为User对象有一个 getName() 方法。 但实际上并非如此,因此开发人员犯了一个错误:
PhpStorm 不会将此视为错误,因为它对 $user 变量一无所知。 所以它没有被注意到,我们最终会遇到一个非常讨厌的错误。
第一个选项是只打开严格类型,这在 PHP7 中成为可能,但我们假设由于某种原因我们不能这样做。 也许我们正在使用遗留代码。 在这种情况下,如果我们允许,PhpStorm 会帮助我们。
为此,您需要为每个函数生成一个 PHPDoc。 这通常被认为是一个好习惯,它将帮助您避免错误、与其他开发人员相处,甚至通过雇主检查您的源代码的面试。
要生成 PHPDoc,请将光标移至函数名称,按Alt + Enter ,在弹出菜单中选择“Generate PHPDoc for function”项,然后再次按Enter 。
将出现基本的 PHPDoc 模板:
你可以看到 PhpStorm 猜测返回值是一个数组,但它无法猜测它是一个User对象的数组,所以让我们通过将 'array' 更改为读取 'User[]' 来明确规定这一点:
既然我们已经告诉了 PhpStorm 它需要了解该方法的内容,让我们回到getUserNames()方法调用:
现在 PhpStorm 可以解析 PHPDoc 返回类型声明,它可以指出错误,甚至可以提示到底是什么错误。 PhpStorm 结合 PHPDocs 可以让 PHP 成为一门非常严谨的语言! 一个惊人的结果!
PhpStorm 不仅适用于 PHP 开发人员
虽然涵盖的所有主题都集中在 PHP 开发上,但 PhpStorm 基于一个非常强大的 IntelliJ 平台,使其可以与远离 PHP 世界的各种语言、框架和技术堆栈一起使用。
前端开发
即使您是后端开发人员,您也需要不时解决一些前端问题。 它可以是 HTML 标记中的简单修复、向 REST 客户端添加参数、在 AngularJS 上编写等。好消息是所有这些都可以在 PhpStorm 中完成。
基本的经验法则是:检查是否支持开箱即用。 如果没有,请尝试查找插件。
例如,开箱即用支持 Javascript、CSS 和流行的 CSS 预处理器,如 LESS 和 SASS。 AngularJS 支持很容易作为插件添加(安装路径与 IdeaVim 插件相同)。 有了这种心态,您将能够解决几乎所有可能的前端任务。
使用数据库
通常,应用程序数据库是通过命令行或特殊工具(如 MySQL Workbench)管理的,但 PhpStorm 也可以在这里为您提供帮助。
只需单击屏幕右侧的数据库,您将看到可用数据库列表(最初为空)和一个自动完成的查询窗口,就像公共编辑区域一样,非常方便。
PhpStorm 支持几乎所有现代数据库。 开箱即用支持 MySQL、PostgreSQL、Oracle 数据库和 SQLite,而通过插件安装支持 MongoDB。
平均堆栈
最后一个也是最令人惊叹的非 PHP 示例是 MEAN 堆栈开发。
MEAN 代表 MongoDB、ExpressJS、AngularJS、Node.js。
这是一个趋势技术堆栈,几乎无处不在。 对于快速、轻量级的 Web 服务来说,它非常快并且非常好。
即使作为 PHP 开发人员,我有时也会创建 Node.js 服务作为 PHP 项目的补充工具(例如 websocket 服务、简单的聊天机器人后端等)。
正如您可能猜到的那样,PhpStorm 支持 MEAN 堆栈的所有组件,因此每当您需要创建 MEAN 堆栈项目时,请记住您不需要其他 IDE。 PhpStorm 将完美地完成这项工作。
PhpStorm 的力量掌握在您的手中
使用 PhpStorm 的强大功能和本文介绍的关键技能集,您甚至可以在完成输入之前提高效率并防止错误。
