在Visual Studio代码中创建PHP代码段

问题描述 投票:0回答:1

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

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

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

对于上面的代码片段,可以转到original poster

php visual-studio-code code-snippets
1个回答
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标签之外的所有内容都不会有语法高亮,也不会有代码intellisense - 不酷。

在实践中,有两个问题:

  • 在编辑器中没有标准可靠的方法来识别外部语言。
  • 在同一文件中实现多种语言的代码智能是一个复杂的问题。

因为大概有99%的时间我们在HTML中使用PHP,大多数编辑只是假设.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。

© www.soinside.com 2019 - 2024. All rights reserved.