Создание фрагмента кода PHP в коде Visual Studio
Я немного запутался. Файл, который я редактирую в VScode, является файлом php, и приведенный ниже фрагмент кода не будет работать, если я помещу этот фрагмент в php.json, но это произойдет, если я вставлю этот фрагмент в html.json?!
Может кто-нибудь объяснить, почему фрагмент кода работает в одном, а не в другом?
"php": {
"prefix": "php",
"body": [ "<?php $1 ?>" ],
"description": "php tag"
}
Кредит идет на оригинальный постер для приведенного выше фрагмента кода
3 ответа
Изначально 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.
Я хотел бы развить отличное объяснение Альваро Гонсалеса, предложив обходной путь для тех 99%, чей внешний контекст файла php является HTML. Вы можете добавить свой фрагмент тега php в свои фрагменты HTML .
- Создайте файл, например: php.code-snippets в "/home/user-name/.config/Code/User/snippets/" , затем вставьте:
{ «Тег PHP»: { "префикс": "php", "тело": ["<?php \n\t$1 \n?>"], "description": "Поместите тег php." } }
- затем ctrl+shift+p, выберите «разработчик: перезагрузить окно», чтобы перезапустить VsCode