概述
PHPStorm 中有个功能叫 Live templates
,翻译成中文就叫做动态模板或实时模板。这个功能 PHPer 们肯定或多或少都用过,只是不知道而已。接下来我给大家讲一讲动态模板是什么,以及如何使用动态模板。
动态模板可以让你快速的插入常用或自定义代码结构到你的代码文件中,也就是能够让你输入几个关键字,就能出来整个代码结构。
如何使用?
动态模板的设置位置在File -> Settings -> Editor -> Live Templates
,有的小伙伴可能安装了中文插件,那位置就是文件 -> 设置 -> 编辑器 -> 实时模板
。
我们打开可以看到,已经有很多预置的常用动态模板了。
比如这个缩写是 fore
的动态模板,只要你在编辑器中输入 fore
,然后回车键或者 Tab 键,就会生成如下的代码:
foreach ( as $item) {
}
此时光标在 as
的前面,在光标处输入一个复数名词, $item
变量会联动变化成对应的单数。比如我输入 $users
后,代码如下:
foreach ($users as $user) {
}
输入 $children
后,代码如下:
foreach ($children as $child) {
}
是不是相当方便?
创建动态模板
预置的动态模板可能还不能满足我们的日常开发需求,那我们可以创建自定义动态模板。创建自定义动态模板有两种方法。
创建新的动态模板
点击右上角的 + ,我们先创建一个模板组,用来存放所有自定义的动态模板,这里我们就把模板组取名叫 user
吧。
接下来我们往这个模板组里添加一条动态模板。
比如我们写一个 for 循环的动态模板。
缩写使用 for
,描述填“for循环”,并在模板文本中输入以下代码:
for ($INDEX$ = 0; $INDEX$ < $LIMIT$; $INDEX$++) {
$END$
}
这里用两个 $
包围的东西叫做模板变量,至于它是什么我们下节再细讲。
点击编辑变量按钮,修改完后点击确定。
点击页面下方“适用于XXX”后面的更改,修改该动态模板在什么位置能够生效。比如我选的 PHP -语句,就表示在 PHP 中的语句中都能够使用这个动态模板。
接下来使用我们自定义创建的动态模板看看效果如何。在编辑器中输入 for
,然后回车键或者 Tab 键,生成了以下代码:
for ($i = 0; $i < ; $i++) {
}
将代码片段保存为动态模板
PHPStorm 还支持将代码片段保存为动态模板。
比如我们在编辑器中输入了以下代码:
try {
} catch (\Exception $e) {
}
我们希望将这段代码保存为一个动态模板,则可以选中这段代码,然后点击 工具 -> 保存为实时模板
。
其他操作就和创建动态模板是一样的了。
动态模板变量
在动态模板中模板变量允许用户输入。在使用动态模板生成代码后,模板变量作为输入字段出现在编辑器中。
模板中的变量按以下格式声明:
$<variable_name>$
预定义模板变量
PHPStorm提供两个预定义动态模板变量: $END$
和 $SELECTION$
,你不能编辑预定义动态模板变量。
$END
表示使用模板生成代码后光标的位置。例如,使用模板return $END$;
生成代码return ;
后,光标将在分号之前。$SELECTION$
用于环绕模板,表示我们在编辑器中选择的代码。
此处修改上例来展示环绕模板的用法。我们将上例修改为:
try {
$SELECTION$
} catch (\Exception $e) {
$END$
}
我们选中希望添加 try…catch… 包围的代码,然后按 Ctrl+Alt+T
选择环绕方式,选择我们创建的动态模板。
最终生成如下代码:
try {
$a = 4;
$b = 0;
$c = $a / $b;
} catch (\Exception $e) {
}
通过这个例子大家应该能够理解 $SELECTION$
的用处吧。
预定义方法
在编辑模板变量时,我们可以用预定义的方法给变量赋值。
以下是部分预定义方法,更多请查看官网文档
方法 | 描述 |
---|---|
date([format]) | 用指定格式返回当前系统日期。 |
fileName() | 返回当前文件带扩展名的文件名。 |
fileNameWithoutExtension() | 返回当前文件不带扩展名的文件名。 |
lineNumber() | 返回当前行数。 |
time([format]) | 用指定格式返回当前系统时间。 |
timestamp() | 返回当前系统的时间戳。 |
(以下部分截图来自 jetbrains 官网)
比如我们现在需要创建一个生成 Controller 类的动态模板:
class $Name$Controller extends Controller
{
$END$
}
使用效果如下:
如果使用 fileNameWithoutExtension()
预定义方法:
效果则如下:
官方文档
看到这里大家应该会用动态模板了吧,使用动态模板真的可以提高自己的开发效率。
如果你想了解更多关于 PHPStorm 动态模板的内容,请查看官方文档。