php - 在 Visual Studio Code 中创建 PHP 代码片段
问题描述
我有点困惑。我在 VScode 中编辑的文件是一个 php 文件,如果我将代码片段放在 php.json 中,下面的代码片段将不起作用,但如果我将片段插入 html.json,它会起作用?!
有人可以解释为什么代码片段在一个而不是另一个中起作用吗?
"php": {
"prefix": "php",
"body": [ "<?php $1 ?>" ],
"description": "php tag"
}
归功于上述代码片段的原始海报
解决方案
PHP 最初被设计为一种用于 HTML 的简单模板语言。您曾经拥有静态 HTML 的地方:
<p>Hello, World!</p>
…你可以用动态生成的值替换它的一部分:
<p>Hello, <?=$name?>!</p>
^^^^^^^^^^ ^^^^^ HTML
^^^^^^ PHP
尽管它现在是一种成熟的语言,但它仍然保持相同的基本嵌入式语言语法。
PHP 解释器并不真正关心外部语言是 HTML 还是其他任何语言,因为它只是忽略 PHP 标记之外的所有内容。它读取源文件并按原样打印它,但是当它找到一个打开的 PHP 标记时,它开始解析并作为 PHP 代码执行它在标记内找到的任何内容。因此,可以将 PHP 用作任何东西的模板引擎:CSS、JavaScript、XML、纯文本、二进制文件……随便。PHP 不需要知道或关心。
像 VisualStudio Code 这样的文本编辑器面临不同的情况,因为周围的语言与程序员相关,因此它与编辑器相关。如果它只关心 PHP 代码,那么 PHP 标记之外的所有内容都不会有语法高亮或代码智能感知——不酷。
在实践中,有两个问题:
没有一种标准可靠的方法可以从编辑器中识别外部语言。
在同一个文件中实现多种语言的代码智能是一个复杂的问题。
由于可能 99% 的时间我们在 HTML 中使用 PHP,因此大多数编辑器只是假设.php
文件中的外部语言是 HTML,然后就收工了。
现在,为什么<?php ?>
我的php.json
片段文件中的 for 条目根本不起作用(但在 中时起作用html.json
),而它显然是一个 PHP 标记(并且显然不是 HTML 标记)?
因为当您触发代码段时,您处于 HTML 上下文中。您的插入符号在这里:
<p>Hello, |</p>
……所以 VSCode 在 HTML 片段中搜索。
如果您的插入符号在这里:
<p>Hello, <?=|?>!</p>
…它应该可以完美地工作,因为您在 PHP 上下文中,因此 VSCode 在 PHP 片段中搜索(试试吧!)。但这是一个毫无意义的功能,因为您不想在已经处于 PHP 模式时插入 PHP 标记,因为您不能嵌套 PHP 标记,所以会生成无效的 PHP。
推荐阅读
- javascript - 反应倒计时重置
- swift - 嵌入到 NavigationLink 时,如何防止所有子视图都显示为蓝色?
- haskell - Data.Typeable.cast 到存在类型
- javascript - Webm 自动播放不播放
- c# - WiX & Topshelf - 在安装更新/升级之前无法卸载服务
- r - 根据R中跨变量的匹配数据组合进行过滤
- python - 使用 seaborn 绘图时转换 pandas 列中的数据类型
- slack-api - 无法获得 Slack 机器人令牌 (xoxb)
- javascript - Expo Start 自动打开 Webpack 服务器,而不是在 expo App 中打开
- mysql - 逐月增长百分比 - MySQL 5.x