作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
阿列克谢·菲拉托夫的头像

Alexey Filatov

Alexey是一名经过认证的PHP/MySQL开发人员,对OOP和设计模式以及Zend和Symfony等框架有广泛的了解.

Expertise

Years of Experience

13

Share

成为一个优秀的软件开发人员意味着什么?

首先,它需要你对所从事的特定技术栈有深入的了解. 如果您是LAMP开发人员, 毫无疑问,你需要精通PHP和MySQL, know modern frameworks, 并具备一定的Linux管理技能.

Second, but no less important, 工作知识是你每天在工作流程中使用的补充工具吗.

您需要能够正确地使用版本控制系统, 持续集成工具, 虚拟机管理服务(如Vagrant)和, obviously, 集成开发环境(IDE).

这篇文章涵盖了流行的, 稳健的IntelliJ IDEA IDE PhpStorm, and how, with a little effort, 您可以轻松地将效率提高一倍,甚至在编写代码时防止出现错误.

训练自己使用快捷键

让我们从最简单也可能是最重要的IDE技能开始:正确的键盘使用.

如果你比较一个经验丰富的程序员和一个普通的PC用户, 你会注意到的第一件事是,程序员几乎所有的时间都在使用键盘,几乎不碰鼠标. 这是有原因的:它更有效率.

首先,成为一个好的打字员

而打字并不直接连接到IDE技能, 如果你需要盯着键盘找到每一个键,那么快捷键是没有用的.

如果你还没有达到每分钟至少50个单词的速度, 找一个触摸打字培训网站,比如 TypingClub.com,提高你的速度.

也有一些有竞争力的打字网站,比如 TypingRaces.com,在那里你可以和其他人在打字方面竞争. My recommendation? 每天早上参加一场赛跑作为热身活动.

训练自己使用PhpStorm的快捷方式

最快的学习方法就是不要让自己选择键盘快捷键.

当我学习快捷方式时,我关闭了所有的菜单、标签、导航栏等. 你也可以通过导航到“视图”菜单并取消选中所有标记(你可能想要离开“状态栏”):

取消选中PhpStorm中的视图菜单项.

我的IDE现在看起来像这样:

A barebones IDE.
正如你所看到的,我无法避免使用快捷方式,即使我想这样做.

我花了大约三四天的时间才熬过笔记本电脑崩溃的调整阶段.

如果你发现你的动力萎靡不振,PhpStorm有一个内置的生产力指南. 它包含一个功能列表和每个功能的使用统计数据. 点击“帮助”,然后点击“生产力指南”,你会看到这样的内容:

The Productivity Menu

As you can see, 快捷键让我避免了输入超过20个字符,(在6个月的时间里)减少了1000个额外的字符,并防止了大约1,000 bugs. Pretty motivating!

它还告诉我哪些功能我不经常使用, 找出哪些地方可以提高我的捷径技巧. 回顾你的统计数据,并明智地使用这些知识.

Top Keyboard Shortcuts

Jetbrains提供了一个方便的PDF,其中列出了所有可用的快捷方式 official documentation, and furthermore has a 你不能错过的键盘快捷键列表 ‘. 立即开始学习,直到你能在睡梦中做到为止.

到目前为止,我最喜欢的快捷方式是:

  • Ctrl+ E -切换最近使用的文件
  • Ctrl + / -注释/取消注释代码块
  • Ctrl + B -转到类声明
  • Ctrl + N - navigate to class
  • Ctrl + R - search and replace
  • Ctrl +Alt + L - reformat code
  • Alt + Enter -显示意图行动和快速修复
  • Ctrl + Shift + Enter - complete statement

其中一些是不言自明的,其他的可能需要更多的覆盖.

用Ctrl + E和Enter切换文件

假设您需要频繁地在两个文件之间切换.g. 一个PHP类与你的应用程序的业务逻辑和一个模板之间, 用哪个来渲染和输出.

许多开发人员会从键盘切换到鼠标, 用文件导航到一个选项卡, click it, 用滚轮找到需要的零件. 问题是:速度太慢了!

按Ctrl+E然后回车不是更好吗?

Ctrl+E将显示最近使用的文件列表, 如果你马上按回车键, 您将被切换到当前文件之前使用的文件.

您可以使用ctrl+e在文件之间切换.

如果您想返回,只需再次推送相同的序列.

使用ctrl+e在文件之间切换.

这是在两个文件之间切换的最快方法,只需要敲三下键! 想象一下,当你每天要做数百次这样的事情时,你将节省多少时间.

显示意图行动和快速修复与Alt+Enter

任何现代IDE都会突出错误,并提供一些代码改进建议. 如果将光标移动到任何不完整或未记录的代码段, 你会看到一个灯泡图标, and if you click on it, 您将看到一个可能操作的弹出菜单.

同样的动作也可以通过按压完成 Alt+Enter,这样方便多了.

Alt+Enter显示您的意图操作和快速修复.

在上面截图的情况下, PhpStorm提供了两个选项:在函数中添加一个PHPDoc规范(这是一个非常好的建议), stay tuned), 并删除未使用的参数.

同样的快捷方式可以用于许多其他常见操作:为类属性创建getter和setter, 初始化构造函数中的字段, 添加未定义的方法和属性, etc.

用Ctrl+Shift+Enter完成语句

这个快捷方式非常简单,同时也非常有用, 照上面说的做.

例如,如果您键入 $i = 0 and then press Ctrl+Shift+Enter 紧接着,PhpStorm会给你的表达式加一个分号. If you type if 以及它后面的快捷方式,PhpStorm会添加括号,等等.

尽可能频繁地使用这个快捷方式. 它将为您节省大量时间,因为所有代码都由标准结构组成. 编写结构时速度的提高也会使编写代码的速度大大提高!

The IdeaVim plugin

使用快捷方式可以大大提高你的工作效率, 但如果你觉得还不够, 下一级是IdeaVim插件.

As you probably know, Vim Linux极客和开发工程师是否广泛使用控制台文本编辑器, 通过命令行管理远程服务器.

Vim有两个重要的特性.

首先,它很难学. 第二,如果你很了解它,它就会有回报. 你在文本编辑方面的工作效率会比使用 any GUI editor. 在你的职业生涯中也会有这样的情况:你别无选择,只能使用控制台编辑器, like Vim, (如果你需要在远程web服务器上修复某些内容,并且你只能通过控制台访问它, for example).

但是Vim和PhpStorm有什么关系呢?

许多开发人员希望将Vim的效率与现代IDE的特性结合起来.g. 代码补全、类搜索、高级搜索和导航). 为此,创建了IdeaVim插件.

重要提示:从这里开始,我假设您了解Vim的基础知识. If you don’t, 你可以通过vimtutor开始使用Vim, 在几乎所有的Linux发行版中都可以访问 openvim.

Plugin Installation

1. 导航到“文件”,然后是“设置”,然后是“插件”,在插件搜索框中输入IdeaVim. 勾选插件名称右侧的复选框,点击“应用”. 2. Restart PhpStorm. 3. 打开插件,点击“Tools”,然后点击“Vim Emulator”

通过Tools菜单启用Vim模拟器.

4. 原来的PhpStorm快捷方式和Vim快捷方式(由插件启用)可能会相互冲突, 因此,您需要手动解决这些冲突. 导航到“文件”,“设置”,“其他设置”,然后“Vim仿真”. 您将看到冲突的快捷方式列表. In this list, 您可以选择是否使用PhpStorm快捷方式或Vim快捷方式绑定到该键序列. 你可以在下面的截图中看到我当前的选择. 如果你不能做决定, just leave a shortcut undefined; PhpStorm will ask you to choose when you use it for the first time.

PhpStorm和Vim模拟器之间会有一些快捷方式冲突, 但是你可以选择使用哪一种.

Plugin Usage

打开插件后, 你会立即注意到编辑区域变得类似于Vim:

  • 光标改变了形状,变成了矩形,就像在Vim中一样.
  • 如果您尝试在编辑器中键入一些内容,什么也不会发生.

从这里开始,您可以像在Vim中那样编辑文件,使用 h, j ,k, l 导航键和 i 在正常模式和插入模式之间切换的键.

几乎所有的Vim快捷方式都被插件支持.

Simultaneously, 所有的IDE特性仍然存在, 所以你可以非常快地编辑文本, 只使用键盘(就像在Vim中一样), 仍然在课间跳来跳去, files, 用法和定义(就像PhpStorm的现代工作流).

与普通文本编辑器相比,任何IDE的最大优点之一是能够实现高级搜索.

It may seem redundant, 如果你只做过小项目, 但是当你开始使用大型代码库时, 类之间复杂的OOP关系, 你会明白它是多么不可或缺.

通过普通搜索()很容易找到文件中的特定字符串。Ctrl + F)或搜索及替换(Ctrl + R),但是如果您需要在数千个文件中找到特定类的定义,该怎么办呢? 或者如果您想在包含数千行代码的类中找到特定的方法? 或者,您可能希望从检索结果中排除所有注释? 这就是像PhpStorm这样的现代IDE可以提供帮助的地方.

在本节中,我将向您展示PhpStorm中最有用的搜索变体.

Find in Path

在普通搜索之后, 最简单的搜索是在项目的某个子文件夹的所有文件中搜索特定字符串. 它在PhpStorm中很容易实现,所以我使用它的频率比其他任何搜索选项都要高.

例如,搜索类的用法 User in my example app.

1. Push Ctrl + Shift + F. 您将看到一个带有搜索选项的弹出窗口. Type ‘User’ in the query string. 你会在Preview选项卡中看到一些结果:

一个基本的ctrl+shift+f搜索.

2. Now, 我们可以切换到预览选项卡, 并手动找到所需的结果, 但我们有100多场比赛. Tedious! Let’s be more specific.

首先,我们要搜索类用法,所以让我们检查“仅整词”选项. 它将帮助我们避免类似的结果 E_USER_ERROR.

接下来,让我们排除在注释和字符串文本中的搜索,并限制我们的结果 .php files only.

有时,指定项目的更具体的子文件夹也是有意义的. 在这种情况下,所有特定于项目的代码都位于 app folder.

让我们把作用域目录改成 example-app/app.

现在,我们有一个像这样的搜索窗口:

路径搜索中更精确的发现.

只要我们的搜索参数更具体, 我们已经将结果的数量从数百个减少到24个!

现在,手工检查它们是很容易的. Moreover, 我们甚至不需要单独打开每个文件,因为我们有一个非常方便的预览选项卡:

查找路径搜索结果预览选项卡.

在日常实践中,发现路径搜索覆盖了我所做的所有搜索的80%. 它是如此有用,即使你不使用任何其他的检索, 你还是很有效率的.

Go to Declaration

PhpStorm的另一个极其重要的功能(与所有现代ide一样)是在类和函数的用法和声明之间跳转.

假设我们有一个函数,它创建了一个新的 User. 显然,我们不会记住所有的方法和属性 User class, 因此,我们需要检查类的声明,以决定如何执行所有需要的操作. 有几种方法可以做到这一点.

首先,你可以打开一个类声明作为一个快速的只读弹出窗口.

只需将光标移动到任何类使用并按下即可 Ctrl + Shift + I. 将出现只读窗口:

使用Ctrl+shift+I获取只读预览.

您可以检查所有必要的数据,并返回到初始文件. It’s extremely quick; you don’t even need to switch between files!

但是,正如我提到的,弹出窗口是只读的,所以如果您决定更改 User 类时,您将需要另一个快捷方式: Ctrl + Shift + B.

这将直接导航到类. 进行更改时,可以使用 Ctrl + E, Enter 我们之前讲过的序列.

列出当前类的所有方法

搜索功能的最后一个变体,我每天使用的是“按类结构搜索”。. 有时PHP类非常长,很难找到特定的属性或方法.

If you push Ctrl + F12 当类文件打开时,你会看到一个弹出窗口,里面有类的结构:

按ctrl+f12将打开一个弹出窗口,其中包含已打开的类文件的文件结构.

如果你开始输入方法名,你只会看到与你输入的模式匹配的方法:

如果您开始键入方法名称, such as 'get', 您只会在弹出的ctrl+f12中看到匹配的方法.

假设您有大约100个方法(这不是一个好的做法), 但你可能会遇到这样的代码), 你需要经常在两者之间切换. 它可以让你疯狂使用普通搜索!

通过使用文件结构搜索,每次切换大约需要5次按键. Just type Ctrl + F12,开始键入所需方法的名称,按 Enter,你会看到它的声明.

By the way, Ctrl + F12 是不是一个方便的快捷方式,所以您可能要考虑将其更改为其他东西. Personally, I use Alt + R.

在PhpStorm中有更多的搜索方法, 但这三个可以涵盖几乎所有的日常搜索任务.

搜索功能概述

  • 如果您需要搜索在多个文件中找到的内容,请使用find in path search (Ctrl + Shift + F),并尝试使搜索选项(过滤)尽可能具体.
  • 如果需要快速查看类或方法的源代码,请使用 Ctrl + Shift + I 并通过快速弹出窗口检查它(如果您需要编辑它,通过导航到声明) Ctrl + Shift + B instead).
  • 如果你有一个很大的类,并且需要检查它的结构或者在方法之间快速切换, 使用文件结构快捷方式, Ctrl + F12 by default.

所有基本语言结构的动态模板用法

而快捷方式允许您快速编写和浏览代码, 有一种方法可以进一步改进它——自动完成和实时模板.

基本的自动补全非常简单,你当然应该知道它.

如果您开始键入一个类的名称, method, or variable, 任何好的IDE都会向您显示可能的结尾列表. 你可以选择其中的任何一个,避免输入到最后.

Basic autocompletion.

也就是说,使用实时模板可以走得更远.

在本节中,您将了解我在日常工作中使用的活动模板. 我把它们分为三组:基本语言结构, 长名称函数, and HTML chunks.

基本语言结构

不用说,开发人员使用标准的语言结构,比如 while, for, foreach, if 每天很多次,所以每次都从头开始输入是非常低效的. 这就是为什么在PhpStorm中有内置的活动模板.

想要一些改变生活的模板魔法,打开PhpStorm,然后输入 forek 在编辑区,按 Enter. You’ll see this:

“forek”活模板.

PhpStorm用一个完整的 foreach 循环并准备好所有必要变量的存根. 您只需要填写正确的变量名.

If you press Ctrl + J, 您将看到当前支持的活动模板列表, 适用于现地的代码. 你可以选择其中任何一个.

Ctrl+j将显示一个活动模板列表.

正如你可能已经注意到的,这里缺少了一些非常常见的结构. 例如,我总是错过一个活动模板 while 循环,我们来创建它!

Navigate to ‘Settings’, then ‘Editor’, then ‘Live Templates’, choose ‘PHP’, 点击弹出窗口右上方的绿色“+”:

您可以通过点击“设置”、“编辑器”、“实时模板”添加新模板.

在“缩写”字段填写“wh”,在“描述”字段填写“while(bool_expr){…}”。. ' template text '字段应该包含以下内容:

while($EXPR$)  {
    $END$
}

点击“模板文本”文本区域下方的“定义”链接,然后从列表中选择“PHP”, 所以它知道在什么上下文中使用这个模板.

现在,让我们讨论一下它是如何工作的.

When you type wh, Enter 在编辑区域中,它将被模板文本替换.

光标将移动到第一个模板变量, $EXPR$ 在本例中,您可以键入任何表达式(例如.g. $i > 0) and press Enter again.

After that, 光标将移动到下一个变量(本例中只有一个变量)。, and so on. $END$ 是否有一个特殊的变量,表示在填充所有变量后光标应该移动的位置.

我们只有一个变量,所以它会被移到 $END$ right after we fill $EXPR$我们就可以输入一个循环体了.

为您经常使用的所有语言结构创建自己的活动模板. 提前投入一些时间比每天花时间从头开始输入这样的结构要好得多.

PHP Functions

不幸的是,PHP以函数名长而不一致而闻名.

好消息是,您可以使用活动模板将它们替换为简短的缩写. For example, 如果您想正确检查数组中是否存在某个键, 你需要调用这个函数 array_key_exists (my_key, my_array美元).

即使使用标准的自动补全功能,每次都要输入它也是非常乏味的, 因此,只需为所有这些情况创建活动模板即可.

就我个人而言,我更喜欢用“ake”来表示array_key_exists,你也可以选择其他的. 下面是如何创建“ake”动态模板:

作者的“array_key_exists”模板截图.

HTML chunks

最后,但肯定不是最不受欢迎的活动模板用法,是处理HTML块.

如果您还没有使用活模板, 我敢打赌你已经做了很多乏味的(基本上, useless) work, 创建标准的HTML标记元素. Live模板通过做我们上面所做的事情来改变这一点,但是“模板文本”字段是你的HTML.

Avoid Bugs with PHPDocs

到目前为止,您已经了解了PhpStorm的效率提示和技巧,但是等等,还有更多. 效率并不是它能起到作用的唯一领域, 它还可以帮助避免bug, 甚至在程序第一次运行之前.

开箱即用,PhpStorm告诉您明显的错误.

For example, 如果您忘记了语句后面的分号, it will mark it red, 但是这个功能是微不足道的, so I’ll not describe it.

有趣的是,PhpStorm会告诉你更复杂的bug, 当你通过PHPDocs给它需要的信息时.

Ideally, PHPDoc规范对于您的团队来说是强制性的,并且尽可能严格. 考虑一个例子 User class again. 假设我们有一个函数,它返回一个数组 User objects:

用户对象的数组.

默认情况下,它没有记录, 因此,其他开发人员可能不知道返回值的类型,并可能不正确地使用它.

例如,其他开发人员希望检索用户名列表. 她认为,出于某种原因 User 对象有一个getName()方法. 但实际上并非如此,所以开发者犯了一个错误:

在本例中,用户类没有getName()方法.

PhpStorm并不把这个当成bug,因为它对$user变量一无所知. 所以它没有被注意到,最后我们得到了一个非常严重的错误.

第一个选项是直接打开严格类型, 这在PHP7中成为可能, 但我们假设由于某种原因我们不能这样做. 也许我们正在处理遗留代码. 在这种情况下,PhpStorm将帮助我们,如果我们让它.

为此,您需要为每个函数生成一个PHPDoc. 这通常被认为是一种好习惯, 它会帮助你避免虫子, 与其他开发者和睦相处, 甚至通过面试,雇主会检查你的源代码.

要生成PHPDoc,请将光标移动到函数名称上,按 Alt + Enter,在弹出菜单中选择“Generate PHPDoc for function”,按下 Enter again.

Alt+enter提供了为函数生成PHPDoc的选项.

基本的PHPDoc模板将出现:

User类的基本PHPDoc模板.

可以看到PhpStorm猜测返回值是一个数组, 但它猜不出这是一个数组 User 所以让我们通过将' array '改为' User[] '来明确规定:

更新PHPDoc提供User[]作为返回值.

现在我们已经告诉了PhpStorm它需要知道的关于这个方法的信息,让我们回到 getUserNames() method call:

既然已经定义了PHPDocs,我们可以看到getUserNames()是无效的.

现在PhpStorm可以解析PHPDoc返回类型声明了, 它可以指出错误,甚至提示我们到底是什么错了. PhpStorm结合PHPDocs,可以使PHP成为一门非常严谨的语言! An amazing outcome!

PhpStorm不只是为PHP开发人员

而所有涉及的主题都集中在 PHP development, PhpStorm是基于一个非常强大的IntelliJ平台, 使其能够与各种语言一起使用, frameworks, and tech stacks, 远离PHP世界.

Front-end development

即使您是后端开发人员,也需要不时地解决一些前端问题. 它可以是HTML标记中的一个简单修复, 向REST客户端添加参数, written on AngularJS, etc. 好消息是,所有这些都可以在PhpStorm中完成.

基本的经验法则是:检查它是否支持开箱即用. 如果没有,试着找一个插件.

For example, Javascript, CSS, 和流行的CSS预处理器, like LESS and SASS, 是开箱即用的吗. AngularJS支持很容易作为插件添加(安装路径与IdeaVim插件相同). 有了这种心态,你将能够解决几乎所有可能的前端任务.

Working with Databases

Typically, 应用程序数据库通过命令行或特殊工具进行管理, like MySQL Workbench, 但PhpStorm也可以帮到你.

只需单击屏幕右侧的数据库, 您将看到一个可用数据库列表(最初为空)和一个查询窗口, 它有自动补全功能, 比如公共编辑区, 这很方便.

PhpStorm支持几乎所有的现代数据库. MySQL, PostgreSQL, Oracle Database, 和SQLite都是开箱即用的, 而MongoDB通过插件安装支持.

MEAN stack

最后一个也是最神奇的非php示例是 MEAN stack development.

MEAN代表MongoDB, ExpressJS, AngularJS, Node.js.

这是一个流行的技术堆栈,几乎无处不在. 它非常快,非常适合快速、轻量级的web服务.

即使作为PHP开发人员,我有时也会创建 Node.js 服务作为PHP项目的补充工具(例如.g. Websocket服务,简单的聊天机器人后端等).

As you probably guessed, PhpStorm支持MEAN栈的所有组件, 所以当你需要创建一个MEAN堆栈项目时, 请记住,您不需要另一个IDE. PhpStorm将完美地完成这项工作.

PhpStorm的力量在你的手中

使用PhpStorm的强大功能和本文中介绍的关键技能, 你也可以提高你的效率和防止错误,甚至在你完成打字之前.

聘请Toptal这方面的专家.
Hire Now
阿列克谢·菲拉托夫的头像
Alexey Filatov

Located in 泰国,普吉岛

Member since June 20, 2016

About the author

Alexey是一名经过认证的PHP/MySQL开发人员,对OOP和设计模式以及Zend和Symfony等框架有广泛的了解.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

Expertise

Years of Experience

13

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

Toptal Developers

Join the Toptal® community.