在Visual Studio Code中创建PHP代码段

时间:2018-08-28 13:24:37

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

我有点困惑。我正在VScode中编辑的文件是一个php文件,如果我将代码段放入php.json中,则下面的代码段将不起作用,但是如果我将代码段插入html.json中,它将起作用。 >

有人可以解释为什么代码片段在一个而不是另一个中起作用吗?

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

上述代码段的信用转到original poster

1 个答案:

答案 0 :(得分:0)

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%的时间我们都将PHP包含在HTML中,所以大多数编辑器只是假设.php文件中的外部语言是HTML,所以每天都将其命名。


现在,为什么我的<?php ?>代码段文件中的php.json条目根本不起作用(但在html.json中有效),它显然是PHP标记(显然不是HTML标签)?

由于触发代码段时,您处于HTML上下文中。您的插入符号在这里:

<p>Hello, |</p>

…因此VSCode在HTML代码段中进行搜索。

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

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

…它应该可以正常工作,因为您处于PHP上下文中,因此VSCode在PHP代码段中进行搜索(尝试!)。但这是没有意义的功能,因为您不希望在已经处于PHP模式的情况下插入PHP标记-生成无效的PHP,因为您无法嵌套PHP标记。

相关问题