【问题标题】:Creating a PHP code snippet in Visual Studio Code在 Visual Studio Code 中创建 PHP 代码片段
【发布时间】:2019-02-03 03:46:49
【问题描述】:

我有点困惑。我在 VScode 中编辑的文件是一个 php 文件,如果我将 sn-p 放在 php.json 中,下面的代码 sn-p 将不起作用,但如果我将 sn-p 插入 html,它会起作用。 json?!

有人能解释一下为什么代码 sn-p 在一个而不是另一个中起作用吗?

"php": {
   "prefix": "php",
   "body": [ "<?php $1 ?>" ],
   "description": "php tag"
}

以上代码 sn-p 归功于original poster

【问题讨论】:

  • 我建议您在上述问题的底部推荐这个问题,以便回答问题的人会详细解释您。所以他的回答对未来也很有用。
  • 你永远不会在 PHP 上下文中输入&lt;?php。只有在外面才有意义。 VSCode 嵌入式语言支持不是特别复杂,它只是假设 HTML。
  • @Thomas Easo 我做了,但被否决并被告知要创建一个新问题。
  • @ÁlvaroGonzález 我有一个混合了 html 和 php 的 php 文件,所以我希望能够键入 php 然后 tab 并获取 。如果您的回答是为了回答我的问题,那么它失败了,对不起?!

标签: php visual-studio-code code-snippets


【解决方案1】:

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,然后就结束了。


现在,为什么我的&lt;?php ?&gt; 在我的php.json sn-p 文件中的条目根本不起作用(但在html.json 中有效),而它显然是一个PHP 标记(而且显然不是一个HTML 标记)?

因为当您触发 sn-p 时,您处于 HTML 上下文中。您的插入符号在这里:

<p>Hello, |</p>

...所以 VSCode 在 HTML sn-ps 中搜索。

如果您的插入符号是例如这里:

<p>Hello, <?=|?>!</p>

...它应该可以完美运行,因为您在 PHP 上下文中,因此 VSCode 在 PHP sn-ps 中搜索(试试看!)。但这是一个毫无意义的功能,因为您不想在已经处于 PHP 模式时插入 PHP 标记——这会生成无效的 PHP,因为您不能嵌套 PHP 标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2020-09-07
    • 1970-01-01
    相关资源
    最近更新 更多