簡體   English   中英

在 Visual Studio Code 中創建 PHP 代碼片段

[英]Creating a PHP code snippet in Visual Studio Code

我有點困惑。 The file I'm editing in VScode is a php file and the code snippet below will not work if I put the snippet in the php.json, but it does, if I insert the snippet into the 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.json片段文件中的<?php ?>條目根本不起作用(但在html.jsonhtml.json ),而它顯然是PHP標記(顯然不是HTML標記)?

因為當您觸發代碼段時,您處於HTML上下文中。 您的插入符號在這里:

<p>Hello, |</p>

…因此VSCode在HTML代碼段中進行搜索。

如果您的插入符號例如在這里:

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

…它應該可以正常工作,因為您處於PHP上下文中,因此VSCode在PHP代碼段中進行搜索(嘗試一下!)。 但這是沒有意義的功能,因為您不想在已經處於PHP模式的情況下插入PHP標記-因為您無法嵌套PHP標記,所以生成無效的PHP。

我想在 Álvaro González 的精彩解釋的基礎上為那些 99% 的外部 php 文件上下文HTML 的人提出一種解決方法。 您可以將 php 標簽片段添加HTML 片段中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM