Создание фрагмента кода PHP в коде Visual Studio - PullRequest
0 голосов
/ 28 августа 2018

Я немного растерялся. Файл, который я редактирую в VScode, является файлом php, и приведенный ниже фрагмент кода не будет работать, если я помещу этот фрагмент в php.json, но он будет работать, если я вставлю этот фрагмент в html.json?!

Может кто-нибудь объяснить, почему фрагмент кода работает в одном, а не в другом?

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

Кредит отправляется на оригинальный постер для приведенного выше фрагмента кода

1 Ответ

0 голосов
/ 30 августа 2018

PHP изначально разрабатывался как простой язык шаблонов для HTML. Где у вас был статический HTML:

<p>Hello, World!</p>

& hellip; вы могли бы заменить его часть динамически сгенерированным значением:

<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>
* +1036 * & hellip; поэтому VSCode выполняет поиск в HTML-фрагментах.

Если ваша карета была, например, здесь:

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

& hellip; он должен работать без сбоев, потому что вы находитесь в контексте PHP, поэтому VSCode ищет в фрагментах PHP (попробуйте!). Но это бессмысленная функция, потому что вы не хотите вставлять теги PHP, когда вы уже находитесь в режиме PHP - это генерирует недопустимый PHP, потому что вы не можете вкладывать теги PHP.

...